﻿using Module_Debug.Hardware;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Ports;
using System.Text;
using System.Threading;
using System.Windows.Forms;
//using JOJO_gamma;

namespace Module_Debug.VDDIC_Gamma
{
    public partial class RM692EX : Form
    {
        #region 参数定义
        CaSDK CaSDKObj = new CaSDK();
        CRC16 CRCData = new CRC16();
        Gamma_Addr GAMMAs = new Gamma_Addr();
        //Class_JOJO_gamma Flexible = new Class_JOJO_gamma();
        private bool Listening = false;//是否没有执行完invoke相关操作   
        private bool IClosing = false;//是否正在关闭串口，执行Application.DoEvents，并阻止再次invoke 

        private List<byte> buffer = new List<byte>(2048);//默认分配1/16页内存，并始终限制不允许超过
        private double[,] D_lums;//目标值-单色
        private double[] D_lum;//目标值-白色
        private double lum_off, x_off, y_off;
        private int index = 0;
        private int flag1 = 1;
        private int flag2 = 1;
        private int flag3 = 1;
        private byte[] Send_buf = new byte[1];
        private byte[] Rec_tmp = new byte[1];
        //创建类型为Person的对象集合
        List<Setting.Gamma_Property> Diven_Gamma = new List<Setting.Gamma_Property>();
        List<Setting.Offset_Property> Diven_Offset = new List<Setting.Offset_Property>();
        private static bool Gamma_adjust_timeout_flag = false;

        private ushort[] gamma_r = new ushort[33];
        private ushort[] gamma_g = new ushort[33];
        private ushort[] gamma_b = new ushort[33];

        //Gamma绑点定义
        // private byte[] Point_RM692EX = new byte[33] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 };
        private int Total_points = 0;
        private int Frame_selected = 1;
        private int Gamma_selected = 1;
        private byte Gamma_selected_value = 1;
        private byte[] Gamma_selected_buffer = new byte[50]
            {1,2, 3, 4, 5, 6, 7, 8, 9, 10,
            11,12,13,14,15,16,17,18,19,20,
            21,22,23,24,25,26,27,28,29,30,
            31,32,33,34,35,36,37,38,39,40,
            81,82,0,  0, 0, 0, 0, 0, 0,83,};

        public struct RM692EX_in //接收区
        {
            public byte ID; //下位机识别ID
        }
        public RM692EX_in RM692EX_info = new RM692EX_in();   //数据
        #endregion

        #region 窗体ID
        //RM692EX 监听挂载
        frmMain frmHelp = null;
        public RM692EX(frmMain RM692EX)
        {
            frmHelp = RM692EX;
            InitializeComponent();
            frmHelp.Child_window_hide_already = true;
            frmHelp.Child_Gamma_Window_Open_Enable = false;//防止重复开启子窗体    
            RM692EX_info.ID = 0X64;   //数据
        }
        //RM692EX 监听卸载
        private void RM692EX_FormClosed(object sender, FormClosedEventArgs e)
        {
            frmHelp.comPort.DataReceived -= new SerialDataReceivedEventHandler(RM692EX_DataReceived);
            frmHelp.comPort.DataReceived += new SerialDataReceivedEventHandler(frmHelp.SerialPort1_DataReceived);
            frmHelp.Child_window_hide_already = false;
            frmHelp.Child_Gamma_Window_Open_Enable = true; //允许其他子窗体打开
            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX_FormClosed！\r\n";
            frmHelp.IC_comboBox.Enabled = true;
        }

        private void RM692EX_Gamma_VisibleChanged(object sender, EventArgs e)
        {
            if (frmHelp.Child_window_hide_already == false) //子窗体已开启标识
            {
                frmHelp.comPort.DataReceived -= new SerialDataReceivedEventHandler(RM692EX_DataReceived);
                frmHelp.comPort.DataReceived += new SerialDataReceivedEventHandler(frmHelp.SerialPort1_DataReceived);
                frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX_FormHide！\r\n";
                frmHelp.Child_window_hide_already = true; //子窗体已隐藏标识
            }
            else
            {
                frmHelp.comPort.DataReceived -= new SerialDataReceivedEventHandler(frmHelp.SerialPort1_DataReceived);
                frmHelp.comPort.DataReceived += new SerialDataReceivedEventHandler(RM692EX_DataReceived);
                frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX_FormOpened！\r\n";
                frmHelp.Child_window_hide_already = false; //子窗体已开启标识
            }
        }
        #endregion

        #region 串口接收
        //串口接收
        private void RM692EX_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)//Getting data from Comm Port
        {
            if (IClosing) return;
            try
            {
                Listening = true;//设置标记，说明我已经开始处理数据，一会儿要使用系统UI的。         
                int n = frmHelp.comPort.BytesToRead;
                byte[] buf = new byte[n];
                //byte data;

                frmHelp.comPort.Read(buf, 0, n);//读取缓冲数据     
                bool data_1_catched = false;//缓存记录数据是否捕获到    
                buffer.AddRange(buf);
                byte CRCH, CRCL;
                if (buffer.Count > 3)
                {
                    // RM692EX_info.ID: RM692EX的Gamma读写、寄存器读写、OTP读写    设置  返回
                    if (buffer[0] == RM692EX_info.ID && Setting.TempRecord.cmdLen > 0)
                    {
                        if (buffer.Count >= Setting.TempRecord.cmdLen)
                        {
                            Rec_tmp = new byte[Setting.TempRecord.cmdLen];
                            byte[] crcTemp = new byte[Setting.TempRecord.cmdLen];
                            buffer.CopyTo(0, crcTemp, 0, Setting.TempRecord.cmdLen);

                            CRCData.CalculateCrc16(crcTemp, out CRCH, out CRCL);
                            if (buffer[Setting.TempRecord.cmdLen - 2] != CRCH && buffer[Setting.TempRecord.cmdLen - 1] != CRCL)     //CRC校验出错
                            {
                                buffer.RemoveRange(0, buffer.Count);
                            }
                            else
                            {
                                buffer.CopyTo(0, Rec_tmp, 0, Setting.TempRecord.cmdLen);//复制一条完整数据到具体的数据缓存   
                                data_1_catched = true;
                                buffer.RemoveRange(0, Setting.TempRecord.cmdLen);//正确分析一条数据，从缓存中移除数据。 
                            }

                        }
                    }
                    else
                    {
                        buffer.RemoveRange(0, buffer.Count);
                    }
                }
                if (data_1_catched)
                {
                    this.Invoke((EventHandler)(delegate
                    {
                        frmHelp.T1.Enabled = false; //停止超时计数
                        //---------------------------------------------------RM692EX---------------------------------------
                        if (Rec_tmp[0] == RM692EX_info.ID)
                        {
                            switch (Rec_tmp[1])
                            {
                                case 0x01: { if (Rec_tmp[4] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写寄存器\tOK！\r\n"; } break;
                                case 0x02:
                                    {
                                        int i;
                                        string tmp = "";
                                        for (i = 3; i <= (Rec_tmp[2] + 1); i++)
                                        {
                                            tmp = tmp + String.Format("{0:X2}", Rec_tmp[i]) + ",";//16进制
                                        }
                                        tmp = tmp + String.Format("{0:X2}", Rec_tmp[i]);

                                        RM692EX_Reg_Data.Text = tmp;
                                        frmHelp.textBox1.Text = frmHelp.textBox1.Text + "寄存器\t读 OK！\r\n";
                                    }
                                    break;
                                case 0x03:
                                    {
                                        if (Rec_tmp[4] == 0x00)
                                        {
                                            if ((Rec_tmp[3] & 0xf0) == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "红 Gamma数据\t写 OK！\r\n";
                                            else if ((Rec_tmp[3] & 0xf0) == 0x40) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "绿 Gamma数据\t写 OK！\r\n";
                                            else if ((Rec_tmp[3] & 0xf0) == 0x80) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "蓝 Gamma数据\t写 OK！\r\n";
                                        }
                                    }
                                    break;
                                case 0x07:
                                    {
                                        if (Rec_tmp[4] == 0x00)
                                        {
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "OTP OK！\r\n";
                                        }
                                    }
                                    break;
                                case 0x06:
                                    {
                                        if (Rec_tmp[4] == 0x00)
                                        {
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "Gamma 绑点重置 OK！\r\n";
                                        }
                                    }
                                    break;
                                case 0x08:
                                    {
                                        if (Rec_tmp[4] == 0x00)
                                        {
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "inter gamma setting OK！\r\n";
                                        }
                                    }
                                    break;
                                case 0x09:
                                    {
                                        if (Rec_tmp[4] == 0x00)
                                        {
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "exit setting OK！\r\n";
                                        }
                                    }
                                    break;
                                case 0x0A:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma1 OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma1 OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x0D:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma2 OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma2 OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x0E:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma3 OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma3 OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x0F:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Gamma4 OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写GOA OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x10:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Power OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Power OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x0B:
                                    {
                                        string tmp = "";
                                        tmp = String.Format("{0:X2}", Rec_tmp[4]);
                                        //RM692EX_Time.Text = tmp;
                                        frmHelp.textBox1.Text = frmHelp.textBox1.Text + "OTP\t读 OK！\r\n";
                                    }
                                    break;
                                case 0x0C:
                                    {
                                        //if (Rec_tmp[4] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写第" + RM692EX_Time.Text + "次\t写 OK！\r\n";
                                        //else if (Rec_tmp[4] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写第" + RM692EX_Time.Text + "次\t写 OK！\r\n";
                                    }
                                    break;
                                case 0x20:
                                    {
                                        if (Rec_tmp[4] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "Change Gray\t写 OK！\r\n";
                                        else if (Rec_tmp[4] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "Change GrayP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x1C:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Others OTP\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "写Others OTP\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0xAA:
                                    {
                                        if (Rec_tmp[3] == 0x00) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "GIR\t写 OK！\r\n";
                                        else if (Rec_tmp[3] == 0x02) frmHelp.textBox1.Text = frmHelp.textBox1.Text + "GIR\t写 ERROR！\r\n";
                                    }
                                    break;
                                case 0x04:
                                    {
                                        if (Setting.TempRecord.RM692EXCmdType == 0x03) //red
                                        {
                                            RM692EX_R0.Value = Decimal.Parse((Rec_tmp[4] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[5].ToString());
                                            RM692EX_R1.Value = Decimal.Parse((Rec_tmp[6] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[7].ToString());
                                            RM692EX_R2.Value = Decimal.Parse((Rec_tmp[8] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[9].ToString());
                                            RM692EX_R3.Value = Decimal.Parse((Rec_tmp[10] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[11].ToString());
                                            RM692EX_R4.Value = Decimal.Parse((Rec_tmp[12] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[13].ToString());
                                            RM692EX_R5.Value = Decimal.Parse((Rec_tmp[14] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[15].ToString());
                                            RM692EX_R6.Value = Decimal.Parse((Rec_tmp[16] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[17].ToString());
                                            RM692EX_R7.Value = Decimal.Parse((Rec_tmp[18] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[19].ToString());
                                            RM692EX_R8.Value = Decimal.Parse((Rec_tmp[20] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[21].ToString());
                                            RM692EX_R9.Value = Decimal.Parse((Rec_tmp[22] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[23].ToString());
                                            RM692EX_R10.Value = Decimal.Parse((Rec_tmp[24] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[25].ToString());
                                            RM692EX_R11.Value = Decimal.Parse((Rec_tmp[26] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[27].ToString());
                                            RM692EX_R12.Value = Decimal.Parse((Rec_tmp[28] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[29].ToString());
                                            RM692EX_R13.Value = Decimal.Parse((Rec_tmp[30] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[31].ToString());
                                            RM692EX_R14.Value = Decimal.Parse((Rec_tmp[32] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[33].ToString());
                                            if (start_15gamma == false)
                                            {
                                                RM692EX_R15.Value = Decimal.Parse((Rec_tmp[34] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[35].ToString());
                                                RM692EX_R16.Value = Decimal.Parse((Rec_tmp[36] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[37].ToString());
                                                RM692EX_R17.Value = Decimal.Parse((Rec_tmp[38] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[39].ToString());
                                                RM692EX_R18.Value = Decimal.Parse((Rec_tmp[40] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[41].ToString());
                                                RM692EX_R19.Value = Decimal.Parse((Rec_tmp[42] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[43].ToString());
                                                RM692EX_R20.Value = Decimal.Parse((Rec_tmp[44] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[45].ToString());
                                                RM692EX_R21.Value = Decimal.Parse((Rec_tmp[46] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[47].ToString());
                                                RM692EX_R22.Value = Decimal.Parse((Rec_tmp[48] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[49].ToString());
                                                RM692EX_R23.Value = Decimal.Parse((Rec_tmp[50] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[51].ToString());
                                                RM692EX_R24.Value = Decimal.Parse((Rec_tmp[52] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[53].ToString());
                                                RM692EX_R25.Value = Decimal.Parse((Rec_tmp[54] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[55].ToString());
                                                RM692EX_R26.Value = Decimal.Parse((Rec_tmp[56] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[57].ToString());
                                                //RM692EX_R27.Value = Decimal.Parse((Rec_tmp[58] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[59].ToString());
                                                //RM692EX_R28.Value = Decimal.Parse((Rec_tmp[60] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[61].ToString());
                                                //RM692EX_R29.Value = Decimal.Parse((Rec_tmp[62] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[63].ToString());
                                                //RM692EX_R30.Value = Decimal.Parse((Rec_tmp[64] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[65].ToString());
                                                //RM692EX_R31.Value = Decimal.Parse((Rec_tmp[66] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[67].ToString());
                                                //RM692EX_R32.Value = Decimal.Parse((Rec_tmp[68] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[69].ToString());
                                            }
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "红 Gamma数据\t读 OK！\r\n";
                                        }
                                        else if (Setting.TempRecord.RM692EXCmdType == 0x04) //green
                                        {
                                            RM692EX_G0.Value = Decimal.Parse((Rec_tmp[4] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[5].ToString());
                                            RM692EX_G1.Value = Decimal.Parse((Rec_tmp[6] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[7].ToString());
                                            RM692EX_G2.Value = Decimal.Parse((Rec_tmp[8] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[9].ToString());
                                            RM692EX_G3.Value = Decimal.Parse((Rec_tmp[10] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[11].ToString());
                                            RM692EX_G4.Value = Decimal.Parse((Rec_tmp[12] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[13].ToString());
                                            RM692EX_G5.Value = Decimal.Parse((Rec_tmp[14] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[15].ToString());
                                            RM692EX_G6.Value = Decimal.Parse((Rec_tmp[16] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[17].ToString());
                                            RM692EX_G7.Value = Decimal.Parse((Rec_tmp[18] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[19].ToString());
                                            RM692EX_G8.Value = Decimal.Parse((Rec_tmp[20] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[21].ToString());
                                            RM692EX_G9.Value = Decimal.Parse((Rec_tmp[22] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[23].ToString());
                                            RM692EX_G10.Value = Decimal.Parse((Rec_tmp[24] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[25].ToString());
                                            RM692EX_G11.Value = Decimal.Parse((Rec_tmp[26] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[27].ToString());
                                            RM692EX_G12.Value = Decimal.Parse((Rec_tmp[28] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[29].ToString());
                                            RM692EX_G13.Value = Decimal.Parse((Rec_tmp[30] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[31].ToString());
                                            RM692EX_G14.Value = Decimal.Parse((Rec_tmp[32] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[33].ToString());
                                            if (start_15gamma == false)
                                            {
                                                RM692EX_G15.Value = Decimal.Parse((Rec_tmp[34] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[35].ToString());
                                                RM692EX_G16.Value = Decimal.Parse((Rec_tmp[36] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[37].ToString());
                                                RM692EX_G17.Value = Decimal.Parse((Rec_tmp[38] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[39].ToString());
                                                RM692EX_G18.Value = Decimal.Parse((Rec_tmp[40] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[41].ToString());
                                                RM692EX_G19.Value = Decimal.Parse((Rec_tmp[42] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[43].ToString());
                                                RM692EX_G20.Value = Decimal.Parse((Rec_tmp[44] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[45].ToString());
                                                RM692EX_G21.Value = Decimal.Parse((Rec_tmp[46] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[47].ToString());
                                                RM692EX_G22.Value = Decimal.Parse((Rec_tmp[48] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[49].ToString());
                                                RM692EX_G23.Value = Decimal.Parse((Rec_tmp[50] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[51].ToString());
                                                RM692EX_G24.Value = Decimal.Parse((Rec_tmp[52] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[53].ToString());
                                                RM692EX_G25.Value = Decimal.Parse((Rec_tmp[54] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[55].ToString());
                                                RM692EX_G26.Value = Decimal.Parse((Rec_tmp[56] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[57].ToString());
                                                //RM692EX_G27.Value = Decimal.Parse((Rec_tmp[58] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[59].ToString());
                                                //RM692EX_G28.Value = Decimal.Parse((Rec_tmp[60] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[61].ToString());
                                                //RM692EX_G29.Value = Decimal.Parse((Rec_tmp[62] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[63].ToString());
                                                //RM692EX_G30.Value = Decimal.Parse((Rec_tmp[64] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[65].ToString());
                                                //RM692EX_G31.Value = Decimal.Parse((Rec_tmp[66] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[67].ToString());
                                                //RM692EX_G32.Value = Decimal.Parse((Rec_tmp[68] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[69].ToString());
                                            }
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "绿 Gamma数据\t读 OK！\r\n";
                                        }
                                        else if (Setting.TempRecord.RM692EXCmdType == 0x05) //blue
                                        {
                                            RM692EX_B0.Value = Decimal.Parse((Rec_tmp[4] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[5].ToString());
                                            RM692EX_B1.Value = Decimal.Parse((Rec_tmp[6] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[7].ToString());
                                            RM692EX_B2.Value = Decimal.Parse((Rec_tmp[8] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[9].ToString());
                                            RM692EX_B3.Value = Decimal.Parse((Rec_tmp[10] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[11].ToString());
                                            RM692EX_B4.Value = Decimal.Parse((Rec_tmp[12] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[13].ToString());
                                            RM692EX_B5.Value = Decimal.Parse((Rec_tmp[14] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[15].ToString());
                                            RM692EX_B6.Value = Decimal.Parse((Rec_tmp[16] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[17].ToString());
                                            RM692EX_B7.Value = Decimal.Parse((Rec_tmp[18] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[19].ToString());
                                            RM692EX_B8.Value = Decimal.Parse((Rec_tmp[20] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[21].ToString());
                                            RM692EX_B9.Value = Decimal.Parse((Rec_tmp[22] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[23].ToString());
                                            RM692EX_B10.Value = Decimal.Parse((Rec_tmp[24] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[25].ToString());
                                            RM692EX_B11.Value = Decimal.Parse((Rec_tmp[26] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[27].ToString());
                                            RM692EX_B12.Value = Decimal.Parse((Rec_tmp[28] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[29].ToString());
                                            RM692EX_B13.Value = Decimal.Parse((Rec_tmp[30] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[31].ToString());
                                            RM692EX_B14.Value = Decimal.Parse((Rec_tmp[32] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[33].ToString());
                                            if (start_15gamma == false)
                                            {
                                                RM692EX_B15.Value = Decimal.Parse((Rec_tmp[34] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[35].ToString());
                                                RM692EX_B16.Value = Decimal.Parse((Rec_tmp[36] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[37].ToString());
                                                RM692EX_B17.Value = Decimal.Parse((Rec_tmp[38] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[39].ToString());
                                                RM692EX_B18.Value = Decimal.Parse((Rec_tmp[40] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[41].ToString());
                                                RM692EX_B19.Value = Decimal.Parse((Rec_tmp[42] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[43].ToString());
                                                RM692EX_B20.Value = Decimal.Parse((Rec_tmp[44] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[45].ToString());
                                                RM692EX_B21.Value = Decimal.Parse((Rec_tmp[46] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[47].ToString());
                                                RM692EX_B22.Value = Decimal.Parse((Rec_tmp[48] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[49].ToString());
                                                RM692EX_B23.Value = Decimal.Parse((Rec_tmp[50] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[51].ToString());
                                                RM692EX_B24.Value = Decimal.Parse((Rec_tmp[52] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[53].ToString());
                                                RM692EX_B25.Value = Decimal.Parse((Rec_tmp[54] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[55].ToString());
                                                RM692EX_B26.Value = Decimal.Parse((Rec_tmp[56] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[57].ToString());
                                                //RM692EX_B27.Value = Decimal.Parse((Rec_tmp[58] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[59].ToString());
                                                //RM692EX_B28.Value = Decimal.Parse((Rec_tmp[60] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[61].ToString());
                                                //RM692EX_B29.Value = Decimal.Parse((Rec_tmp[62] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[63].ToString());
                                                //RM692EX_B30.Value = Decimal.Parse((Rec_tmp[64] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[65].ToString());
                                                //RM692EX_B31.Value = Decimal.Parse((Rec_tmp[66] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[67].ToString());
                                                //RM692EX_B32.Value = Decimal.Parse((Rec_tmp[68] & 0x0f).ToString()) * 256 + Decimal.Parse(Rec_tmp[69].ToString());
                                            }
                                            frmHelp.textBox1.Text = frmHelp.textBox1.Text + "蓝 Gamma数据\t读 OK！\r\n";
                                        }
                                    }
                                    break;
                                default: break;
                            }
                        }
                        frmHelp.textBox1.SelectionStart = this.frmHelp.textBox1.Text.Length;
                        frmHelp.textBox1.ScrollToCaret();//滚动到光标处
                        if (frmHelp.textBox1.Lines.Length > 50) frmHelp.textBox1.Text = null;
                    }));
                }
            }
            finally
            {
                Listening = false;
            }
        }
        #endregion

        #region GAMMA保存和载入
        //Gamma保存
        private void RM692EX_SaveGamma_Click(object sender, EventArgs e)
        {
            SaveFileDialog sf = new SaveFileDialog(); //对话框
            sf.Filter = @"csv文件(*.csv)|*.csv|所有文件(*.*)|*.*"; //定义保存的文件的类型
            string str = "保存Gamma文件";
            if (sf.ShowDialog() == DialogResult.OK) //如果确定保存
            {
                if (sf.FileName == "") return; //如果没有输入文件名
                try
                {
                    StreamWriter sw = null; //文件流
                    sw = new StreamWriter(sf.FileName, false, Encoding.UTF8);
                    str = str + "R0," + RM692EX_R0.Text + "," + "G0," + RM692EX_G0.Text + "," + "B0," + RM692EX_B0.Text + "\r\n";
                    str = str + "R1," + RM692EX_R1.Text + "," + "G1," + RM692EX_G1.Text + "," + "B1," + RM692EX_B1.Text + "\r\n";
                    str = str + "R2," + RM692EX_R2.Text + "," + "G2," + RM692EX_G2.Text + "," + "B2," + RM692EX_B2.Text + "\r\n";
                    str = str + "R3," + RM692EX_R3.Text + "," + "G3," + RM692EX_G3.Text + "," + "B3," + RM692EX_B3.Text + "\r\n";
                    str = str + "R4," + RM692EX_R4.Text + "," + "G4," + RM692EX_G4.Text + "," + "B4," + RM692EX_B4.Text + "\r\n";
                    str = str + "R5," + RM692EX_R5.Text + "," + "G5," + RM692EX_G5.Text + "," + "B5," + RM692EX_B5.Text + "\r\n";
                    str = str + "R6," + RM692EX_R6.Text + "," + "G6," + RM692EX_G6.Text + "," + "B6," + RM692EX_B6.Text + "\r\n";
                    str = str + "R7," + RM692EX_R7.Text + "," + "G7," + RM692EX_G7.Text + "," + "B7," + RM692EX_B7.Text + "\r\n";
                    str = str + "R8," + RM692EX_R8.Text + "," + "G8," + RM692EX_G8.Text + "," + "B8," + RM692EX_B8.Text + "\r\n";
                    str = str + "R9," + RM692EX_R9.Text + "," + "G9," + RM692EX_G9.Text + "," + "B9," + RM692EX_B9.Text + "\r\n";
                    str = str + "R10," + RM692EX_R10.Text + "," + "G10," + RM692EX_G10.Text + "," + "B10," + RM692EX_B10.Text + "\r\n";
                    str = str + "R11," + RM692EX_R11.Text + "," + "G11," + RM692EX_G11.Text + "," + "B11," + RM692EX_B11.Text + "\r\n";
                    str = str + "R12," + RM692EX_R12.Text + "," + "G12," + RM692EX_G12.Text + "," + "B12," + RM692EX_B12.Text + "\r\n";
                    str = str + "R13," + RM692EX_R13.Text + "," + "G13," + RM692EX_G13.Text + "," + "B13," + RM692EX_B13.Text + "\r\n";
                    str = str + "R14," + RM692EX_R14.Text + "," + "G14," + RM692EX_G14.Text + "," + "B14," + RM692EX_B14.Text + "\r\n";
                    str = str + "R15," + RM692EX_R15.Text + "," + "G15," + RM692EX_G15.Text + "," + "B15," + RM692EX_B15.Text + "\r\n";
                    str = str + "R16," + RM692EX_R16.Text + "," + "G16," + RM692EX_G16.Text + "," + "B16," + RM692EX_B16.Text + "\r\n";
                    str = str + "R17," + RM692EX_R17.Text + "," + "G17," + RM692EX_G17.Text + "," + "B17," + RM692EX_B17.Text + "\r\n";
                    str = str + "R18," + RM692EX_R18.Text + "," + "G18," + RM692EX_G18.Text + "," + "B18," + RM692EX_B18.Text + "\r\n";
                    str = str + "R19," + RM692EX_R19.Text + "," + "G19," + RM692EX_G19.Text + "," + "B19," + RM692EX_B19.Text + "\r\n";
                    str = str + "R20," + RM692EX_R20.Text + "," + "G20," + RM692EX_G20.Text + "," + "B20," + RM692EX_B20.Text + "\r\n";
                    str = str + "R21," + RM692EX_R21.Text + "," + "G21," + RM692EX_G21.Text + "," + "B21," + RM692EX_B21.Text + "\r\n";
                    str = str + "R22," + RM692EX_R22.Text + "," + "G22," + RM692EX_G22.Text + "," + "B22," + RM692EX_B22.Text + "\r\n";
                    str = str + "R23," + RM692EX_R23.Text + "," + "G23," + RM692EX_G23.Text + "," + "B23," + RM692EX_B23.Text + "\r\n";
                    str = str + "R24," + RM692EX_R24.Text + "," + "G24," + RM692EX_G24.Text + "," + "B24," + RM692EX_B24.Text + "\r\n";
                    str = str + "R25," + RM692EX_R25.Text + "," + "G25," + RM692EX_G25.Text + "," + "B25," + RM692EX_B25.Text + "\r\n";
                    str = str + "R26," + RM692EX_R26.Text + "," + "G26," + RM692EX_G26.Text + "," + "B26," + RM692EX_B26.Text + "\r\n";

                    sw.WriteLine(str);
                    sw.Dispose(); //释放资源
                    sw.Close(); //关闭数据流
                    MessageBox.Show("Gamma保存OK！", "系统提示：");
                }
                catch
                {
                    MessageBox.Show("Gamma保存时发生错误，请再试！", "系统提示：");
                }
            }
        } //
        //Gamma载入
        private void RM692EX_LoadGamma_Click(object sender, EventArgs e)
        {
            OpenFileDialog of = new OpenFileDialog();
            string strtmp = "";
            of.Filter = @"csv文件(*.csv)|*.csv|所有文件(*.*)|*.*"; ;
            of.Title = "打开Gamma文件";

            if (of.ShowDialog() == DialogResult.OK)
            {
                //读取文本信息
                FileStream fs = new FileStream(of.FileName, FileMode.Open, FileAccess.Read);
                StreamReader streamReader = new StreamReader(fs, Encoding.GetEncoding("GBK"));
                streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
                string strLine = streamReader.ReadLine();
                //循环读取文本信息
                while (!string.IsNullOrEmpty(strLine))
                {
                    strtmp = strtmp + strLine + ",";
                    strLine = streamReader.ReadLine(); //循环读取下一行
                }
                fs.Close(); //关闭流
                streamReader.Close();
                string[] arrtmp = strtmp.Split(new Char[] { ',' });
                RM692EX_R0.Text = arrtmp[1].ToString(); RM692EX_G0.Text = arrtmp[3].ToString(); RM692EX_B0.Text = arrtmp[5].ToString();
                RM692EX_R1.Text = arrtmp[7].ToString(); RM692EX_G1.Text = arrtmp[9].ToString(); RM692EX_B1.Text = arrtmp[11].ToString();
                RM692EX_R2.Text = arrtmp[13].ToString(); RM692EX_G2.Text = arrtmp[15].ToString(); RM692EX_B2.Text = arrtmp[17].ToString();
                RM692EX_R3.Text = arrtmp[19].ToString(); RM692EX_G3.Text = arrtmp[21].ToString(); RM692EX_B3.Text = arrtmp[23].ToString();
                RM692EX_R4.Text = arrtmp[25].ToString(); RM692EX_G4.Text = arrtmp[27].ToString(); RM692EX_B4.Text = arrtmp[29].ToString();
                RM692EX_R5.Text = arrtmp[31].ToString(); RM692EX_G5.Text = arrtmp[33].ToString(); RM692EX_B5.Text = arrtmp[35].ToString();
                RM692EX_R6.Text = arrtmp[37].ToString(); RM692EX_G6.Text = arrtmp[39].ToString(); RM692EX_B6.Text = arrtmp[41].ToString();
                RM692EX_R7.Text = arrtmp[43].ToString(); RM692EX_G7.Text = arrtmp[45].ToString(); RM692EX_B7.Text = arrtmp[47].ToString();
                RM692EX_R8.Text = arrtmp[49].ToString(); RM692EX_G8.Text = arrtmp[51].ToString(); RM692EX_B8.Text = arrtmp[53].ToString();
                RM692EX_R9.Text = arrtmp[55].ToString(); RM692EX_G9.Text = arrtmp[57].ToString(); RM692EX_B9.Text = arrtmp[59].ToString();
                RM692EX_R10.Text = arrtmp[61].ToString(); RM692EX_G10.Text = arrtmp[63].ToString(); RM692EX_B10.Text = arrtmp[65].ToString();
                RM692EX_R11.Text = arrtmp[67].ToString(); RM692EX_G11.Text = arrtmp[69].ToString(); RM692EX_B11.Text = arrtmp[71].ToString();
                RM692EX_R12.Text = arrtmp[73].ToString(); RM692EX_G12.Text = arrtmp[75].ToString(); RM692EX_B12.Text = arrtmp[77].ToString();
                RM692EX_R13.Text = arrtmp[79].ToString(); RM692EX_G13.Text = arrtmp[81].ToString(); RM692EX_B13.Text = arrtmp[83].ToString();
                RM692EX_R14.Text = arrtmp[85].ToString(); RM692EX_G14.Text = arrtmp[87].ToString(); RM692EX_B14.Text = arrtmp[89].ToString();
                RM692EX_R15.Text = arrtmp[91].ToString(); RM692EX_G15.Text = arrtmp[93].ToString(); RM692EX_B15.Text = arrtmp[95].ToString();
                RM692EX_R16.Text = arrtmp[97].ToString(); RM692EX_G16.Text = arrtmp[99].ToString(); RM692EX_B16.Text = arrtmp[101].ToString();
                RM692EX_R17.Text = arrtmp[103].ToString(); RM692EX_G17.Text = arrtmp[105].ToString(); RM692EX_B17.Text = arrtmp[107].ToString();
                RM692EX_R18.Text = arrtmp[109].ToString(); RM692EX_G18.Text = arrtmp[111].ToString(); RM692EX_B18.Text = arrtmp[113].ToString();
                RM692EX_R19.Text = arrtmp[115].ToString(); RM692EX_G19.Text = arrtmp[117].ToString(); RM692EX_B19.Text = arrtmp[119].ToString();
                RM692EX_R20.Text = arrtmp[121].ToString(); RM692EX_G20.Text = arrtmp[123].ToString(); RM692EX_B20.Text = arrtmp[125].ToString();
                RM692EX_R21.Text = arrtmp[127].ToString(); RM692EX_G21.Text = arrtmp[129].ToString(); RM692EX_B21.Text = arrtmp[131].ToString();
                RM692EX_R22.Text = arrtmp[133].ToString(); RM692EX_G22.Text = arrtmp[135].ToString(); RM692EX_B22.Text = arrtmp[137].ToString();
                RM692EX_R23.Text = arrtmp[139].ToString(); RM692EX_G23.Text = arrtmp[141].ToString(); RM692EX_B23.Text = arrtmp[143].ToString();
                RM692EX_R24.Text = arrtmp[145].ToString(); RM692EX_G24.Text = arrtmp[147].ToString(); RM692EX_B24.Text = arrtmp[149].ToString();
                RM692EX_R25.Text = arrtmp[151].ToString(); RM692EX_G25.Text = arrtmp[153].ToString(); RM692EX_B25.Text = arrtmp[155].ToString();
                RM692EX_R26.Text = arrtmp[157].ToString(); RM692EX_G26.Text = arrtmp[159].ToString(); RM692EX_B26.Text = arrtmp[161].ToString();
            }
        }
        #endregion

        private void RM692EX_Others_Click(object sender, EventArgs e)
        {
            Send_buf = new byte[40];
            Button btnTmp = (Button)sender;
            Setting.TempRecord.cmdLen = 40;

            Send_buf[0] = RM692EX_info.ID;        //RM692EX
            Send_buf[2] = 0x02;
            switch (btnTmp.Name)
            {
                case "RM692EX_RegR":
                    {
                        string strLine = Convert.ToString(RM692EX_Reg_Data.Text);
                        string[] arr = strLine.Split(','); //以逗号分割，添加到数组
                        int DataNum = Convert.ToByte(tb_RM692EX_return_num.Text);
                        Setting.TempRecord.cmdLen = DataNum + 1 + 5;
                        Send_buf = new byte[DataNum + 1 + 5];

                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0x02; //read function
                        Send_buf[2] = Convert.ToByte(DataNum + 1);//length
                        Send_buf[3] = byte.Parse((Convert.ToInt32(arr[0], 16)).ToString());//register
                    }
                    break;
                case "RM692EX_RegW":
                    {
                        string strLine = Convert.ToString(RM692EX_Reg_Data.Text);
                        string[] arr = strLine.Split(','); //以逗号分割，添加到数组

                        Setting.TempRecord.cmdLen = arr.Length + 5;
                        Send_buf = new byte[arr.Length + 5];
                        Send_buf[0] = RM692EX_info.ID; //
                        Send_buf[1] = 0x01; //寄存器写
                        Send_buf[2] = byte.Parse(arr.Length.ToString());
                        for (int i = 0; i < arr.Length; i++)
                        {
                            Send_buf[3 + i] = byte.Parse((Convert.ToInt32(arr[i], 16)).ToString());
                        }
                    }
                    break;
                case "btn_RM692EX_gamma_point_select":
                    {
                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0x06; //重置绑点位置
                        Send_buf[2] = 0x23; //33+2cmd = 35;
                    }
                    break;
                case "RM692EX_Reg_OTP":       //          B
                    {
                        Setting.TempRecord.cmdLen = 8;
                        Send_buf = new byte[8];
                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0x07; //OTP function
                        Send_buf[2] = 3;//length
                        if ((Convert.ToByte(RM692EX_Time.Text) == 1)
                            || (Convert.ToByte(RM692EX_Time.Text) == 2)
                            || (Convert.ToByte(RM692EX_Time.Text) == 3)
                            || (Convert.ToByte(RM692EX_Time.Text) == 4)
                            || (Convert.ToByte(RM692EX_Time.Text) == 5)
                            || (Convert.ToByte(RM692EX_Time.Text) == 6))
                        {
                            ;
                        }
                        else
                        {
                            MessageBox.Show("otp_times设置错误，请检查", "错误");
                            return;
                        }
                        Send_buf[3] = Convert.ToByte(RM692EX_Time.Text);
                        if ((radioButton_gamma.Checked) == true)
                        {
                            Send_buf[4] = 1;
                            Gamma_selected_value = Gamma_selected_buffer[(Frame_selected - 1) * 10 + Gamma_selected - 1];
                            Send_buf[5] = Convert.ToByte(Gamma_selected_value);
                        }
                        else if ((radioButton_All.Checked) == true)
                        {
                            Send_buf[4] = 5;
                        }
                        else if ((radioButton_RCN.Checked) == true)
                        {
                            Send_buf[4] = 6;
                        }
                        else if ((radioButton_Demura.Checked) == true)
                        {
                            Send_buf[4] = 7;
                        }
                    }
                    break;
                case "button_inter_gamma":         //inter gamma setting
                    {
                        Setting.TempRecord.cmdLen = 8;
                        Send_buf = new byte[8];
                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0x08;
                        Send_buf[2] = 3;//length
                        Send_buf[3] = Convert.ToByte(Gamma_Band_Select.Text);
                    }
                    break;

                case "button_exit_gamma":         //exit gamma setting
                    {
                        Setting.TempRecord.cmdLen = 8;
                        Send_buf = new byte[8];
                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0x09;
                        Send_buf[2] = 3;//length
                        Send_buf[3] = Convert.ToByte(Gamma_Band_Select.Text);
                    }
                    break;
                case "btn_RM692EX_GIR_SET":
                    {
                        Setting.TempRecord.cmdLen = 11;
                        Send_buf = new byte[11];
                        Send_buf[0] = RM692EX_info.ID;
                        Send_buf[1] = 0xAA;
                        Send_buf[2] = 6;//length
                        Send_buf[3] = (byte)(RM692EX_GIR_26H.Value);
                        Send_buf[4] = (byte)(RM692EX_GIR_27H.Value);
                        Send_buf[5] = (byte)(RM692EX_GIR_R.Value);
                        Send_buf[6] = (byte)(RM692EX_GIR_G.Value);
                        Send_buf[7] = (byte)(RM692EX_GIR_B.Value);
                    }
                    break;
                default:
                    break;
            }
            CRCData.CalculateCrc16(Send_buf, out Send_buf[Send_buf[2] + 3], out Send_buf[Send_buf[2] + 4]);
            try
            {
                frmHelp.comPort.Write(Send_buf, 0, Send_buf[2] + 5);
            }
            catch
            {
                MessageBox.Show("串口有误，请检查", "错误");
            }
            frmHelp.T1.Enabled = false;
            frmHelp.T1.Interval = 3000;
            frmHelp.T1.Enabled = true;
        }
        private void RM692EX_Gamma_Click(object sender, EventArgs e)
        {
            Button btnTmp = (Button)sender;
            if (start_15gamma == false)
            {
                Send_buf = new byte[74];
                Setting.TempRecord.cmdLen = 74;
                Send_buf[2] = 69;
            }
            else
            {
                Send_buf = new byte[36];
                Setting.TempRecord.cmdLen = 36;
                Send_buf[2] = 31; //31   392项目15绑点 读写gamma
            }
            Send_buf[3] = 0;
            Send_buf[0] = RM692EX_info.ID; //RM692EX

            switch (btnTmp.Name)
            {
                case "RM692EX_GammaR_R":
                    {
                        Setting.TempRecord.RM692EXCmdType = 0x03;       //      3
                        Send_buf[1] = 0x04;                             //读 Red Gamma
                        Send_buf[3] = 0x00;
                    }
                    break;
                case "RM692EX_GammaR_G":
                    {
                        Setting.TempRecord.RM692EXCmdType = 0x04;   //      4
                        Send_buf[1] = 0x04;                         //  读Gamma
                        Send_buf[3] = 0x01;                        //绿色 green
                    }
                    break;
                case "RM692EX_GammaR_B": //              9
                    {
                        Setting.TempRecord.RM692EXCmdType = 0x05;   //      5
                        Send_buf[1] = 0x04;                         //   读Gamma
                        Send_buf[3] = 0x02;                        //   blue
                    }
                    break;
                //--------------------------------------
                case "RM692EX_GammaW_R":
                    {
                        Send_buf[1] = 0x03;
                        if (radioButton_Page50.Checked == true)
                        { Send_buf[3] = 0x00; }
                        else
                        { Send_buf[3] = 0x01; }
                        Send_buf[4] = Convert.ToByte(Convert.ToUInt16(RM692EX_R0.Value.ToString()) >> 8);
                        Send_buf[5] = Convert.ToByte((Convert.ToUInt16(RM692EX_R0.Value.ToString())) & 0xff);
                        Send_buf[6] = Convert.ToByte(Convert.ToUInt16(RM692EX_R1.Value.ToString()) >> 8);
                        Send_buf[7] = Convert.ToByte((Convert.ToUInt16(RM692EX_R1.Value.ToString())) & 0xff);
                        Send_buf[8] = Convert.ToByte(Convert.ToUInt16(RM692EX_R2.Value.ToString()) >> 8);
                        Send_buf[9] = Convert.ToByte((Convert.ToUInt16(RM692EX_R2.Value.ToString())) & 0xff);
                        Send_buf[10] = Convert.ToByte(Convert.ToUInt16(RM692EX_R3.Value.ToString()) >> 8);
                        Send_buf[11] = Convert.ToByte((Convert.ToUInt16(RM692EX_R3.Value.ToString())) & 0xff);
                        Send_buf[12] = Convert.ToByte(Convert.ToUInt16(RM692EX_R4.Value.ToString()) >> 8);
                        Send_buf[13] = Convert.ToByte((Convert.ToUInt16(RM692EX_R4.Value.ToString())) & 0xff);
                        Send_buf[14] = Convert.ToByte(Convert.ToUInt16(RM692EX_R5.Value.ToString()) >> 8);
                        Send_buf[15] = Convert.ToByte((Convert.ToUInt16(RM692EX_R5.Value.ToString())) & 0xff);
                        Send_buf[16] = Convert.ToByte(Convert.ToUInt16(RM692EX_R6.Value.ToString()) >> 8);
                        Send_buf[17] = Convert.ToByte((Convert.ToUInt16(RM692EX_R6.Value.ToString())) & 0xff);
                        Send_buf[18] = Convert.ToByte(Convert.ToUInt16(RM692EX_R7.Value.ToString()) >> 8);
                        Send_buf[19] = Convert.ToByte((Convert.ToUInt16(RM692EX_R7.Value.ToString())) & 0xff);
                        Send_buf[20] = Convert.ToByte(Convert.ToUInt16(RM692EX_R8.Value.ToString()) >> 8);
                        Send_buf[21] = Convert.ToByte((Convert.ToUInt16(RM692EX_R8.Value.ToString())) & 0xff);
                        Send_buf[22] = Convert.ToByte(Convert.ToUInt16(RM692EX_R9.Value.ToString()) >> 8);
                        Send_buf[23] = Convert.ToByte((Convert.ToUInt16(RM692EX_R9.Value.ToString())) & 0xff);
                        Send_buf[24] = Convert.ToByte(Convert.ToUInt16(RM692EX_R10.Value.ToString()) >> 8);
                        Send_buf[25] = Convert.ToByte((Convert.ToUInt16(RM692EX_R10.Value.ToString())) & 0xff);
                        Send_buf[26] = Convert.ToByte(Convert.ToUInt16(RM692EX_R11.Value.ToString()) >> 8);
                        Send_buf[27] = Convert.ToByte((Convert.ToUInt16(RM692EX_R11.Value.ToString())) & 0xff);
                        Send_buf[28] = Convert.ToByte(Convert.ToUInt16(RM692EX_R12.Value.ToString()) >> 8);
                        Send_buf[29] = Convert.ToByte((Convert.ToUInt16(RM692EX_R12.Value.ToString())) & 0xff);
                        Send_buf[30] = Convert.ToByte(Convert.ToUInt16(RM692EX_R13.Value.ToString()) >> 8);
                        Send_buf[31] = Convert.ToByte((Convert.ToUInt16(RM692EX_R13.Value.ToString())) & 0xff);
                        Send_buf[32] = Convert.ToByte(Convert.ToUInt16(RM692EX_R14.Value.ToString()) >> 8);
                        Send_buf[33] = Convert.ToByte((Convert.ToUInt16(RM692EX_R14.Value.ToString())) & 0xff);
                        if (start_15gamma == false)
                        {
                            Send_buf[34] = Convert.ToByte(Convert.ToUInt16(RM692EX_R15.Value.ToString()) >> 8);
                            Send_buf[35] = Convert.ToByte((Convert.ToUInt16(RM692EX_R15.Value.ToString())) & 0xff);
                            Send_buf[36] = Convert.ToByte(Convert.ToUInt16(RM692EX_R16.Value.ToString()) >> 8);
                            Send_buf[37] = Convert.ToByte((Convert.ToUInt16(RM692EX_R16.Value.ToString())) & 0xff);
                            Send_buf[38] = Convert.ToByte(Convert.ToUInt16(RM692EX_R17.Value.ToString()) >> 8);
                            Send_buf[39] = Convert.ToByte((Convert.ToUInt16(RM692EX_R17.Value.ToString())) & 0xff);
                            Send_buf[40] = Convert.ToByte(Convert.ToUInt16(RM692EX_R18.Value.ToString()) >> 8);
                            Send_buf[41] = Convert.ToByte((Convert.ToUInt16(RM692EX_R18.Value.ToString())) & 0xff);
                            Send_buf[42] = Convert.ToByte(Convert.ToUInt16(RM692EX_R19.Value.ToString()) >> 8);
                            Send_buf[43] = Convert.ToByte((Convert.ToUInt16(RM692EX_R19.Value.ToString())) & 0xff);
                            Send_buf[44] = Convert.ToByte(Convert.ToUInt16(RM692EX_R20.Value.ToString()) >> 8);
                            Send_buf[45] = Convert.ToByte((Convert.ToUInt16(RM692EX_R20.Value.ToString())) & 0xff);
                            Send_buf[46] = Convert.ToByte(Convert.ToUInt16(RM692EX_R21.Value.ToString()) >> 8);
                            Send_buf[47] = Convert.ToByte((Convert.ToUInt16(RM692EX_R21.Value.ToString())) & 0xff);
                            Send_buf[48] = Convert.ToByte(Convert.ToUInt16(RM692EX_R22.Value.ToString()) >> 8);
                            Send_buf[49] = Convert.ToByte((Convert.ToUInt16(RM692EX_R22.Value.ToString())) & 0xff);
                            Send_buf[50] = Convert.ToByte(Convert.ToUInt16(RM692EX_R23.Value.ToString()) >> 8);
                            Send_buf[51] = Convert.ToByte((Convert.ToUInt16(RM692EX_R23.Value.ToString())) & 0xff);
                            Send_buf[52] = Convert.ToByte(Convert.ToUInt16(RM692EX_R24.Value.ToString()) >> 8);
                            Send_buf[53] = Convert.ToByte((Convert.ToUInt16(RM692EX_R24.Value.ToString())) & 0xff);
                            Send_buf[54] = Convert.ToByte(Convert.ToUInt16(RM692EX_R25.Value.ToString()) >> 8);
                            Send_buf[55] = Convert.ToByte((Convert.ToUInt16(RM692EX_R25.Value.ToString())) & 0xff);
                            Send_buf[56] = Convert.ToByte(Convert.ToUInt16(RM692EX_R26.Value.ToString()) >> 8);
                            Send_buf[57] = Convert.ToByte((Convert.ToUInt16(RM692EX_R26.Value.ToString())) & 0xff);
                        }
                    }
                    break;
                case "RM692EX_GammaW_G":
                    {
                        Send_buf[1] = 0x03;
                        if (radioButton_Page50.Checked == true)
                        { Send_buf[3] = 0x40; }
                        else
                        { Send_buf[3] = 0x41; }
                        Send_buf[4] = Convert.ToByte(Convert.ToUInt16(RM692EX_G0.Value.ToString()) >> 8);
                        Send_buf[5] = Convert.ToByte((Convert.ToUInt16(RM692EX_G0.Value.ToString())) & 0xff);
                        Send_buf[6] = Convert.ToByte(Convert.ToUInt16(RM692EX_G1.Value.ToString()) >> 8);
                        Send_buf[7] = Convert.ToByte((Convert.ToUInt16(RM692EX_G1.Value.ToString())) & 0xff);
                        Send_buf[8] = Convert.ToByte(Convert.ToUInt16(RM692EX_G2.Value.ToString()) >> 8);
                        Send_buf[9] = Convert.ToByte((Convert.ToUInt16(RM692EX_G2.Value.ToString())) & 0xff);
                        Send_buf[10] = Convert.ToByte(Convert.ToUInt16(RM692EX_G3.Value.ToString()) >> 8);
                        Send_buf[11] = Convert.ToByte((Convert.ToUInt16(RM692EX_G3.Value.ToString())) & 0xff);
                        Send_buf[12] = Convert.ToByte(Convert.ToUInt16(RM692EX_G4.Value.ToString()) >> 8);
                        Send_buf[13] = Convert.ToByte((Convert.ToUInt16(RM692EX_G4.Value.ToString())) & 0xff);
                        Send_buf[14] = Convert.ToByte(Convert.ToUInt16(RM692EX_G5.Value.ToString()) >> 8);
                        Send_buf[15] = Convert.ToByte((Convert.ToUInt16(RM692EX_G5.Value.ToString())) & 0xff);
                        Send_buf[16] = Convert.ToByte(Convert.ToUInt16(RM692EX_G6.Value.ToString()) >> 8);
                        Send_buf[17] = Convert.ToByte((Convert.ToUInt16(RM692EX_G6.Value.ToString())) & 0xff);
                        Send_buf[18] = Convert.ToByte(Convert.ToUInt16(RM692EX_G7.Value.ToString()) >> 8);
                        Send_buf[19] = Convert.ToByte((Convert.ToUInt16(RM692EX_G7.Value.ToString())) & 0xff);
                        Send_buf[20] = Convert.ToByte(Convert.ToUInt16(RM692EX_G8.Value.ToString()) >> 8);
                        Send_buf[21] = Convert.ToByte((Convert.ToUInt16(RM692EX_G8.Value.ToString())) & 0xff);
                        Send_buf[22] = Convert.ToByte(Convert.ToUInt16(RM692EX_G9.Value.ToString()) >> 8);
                        Send_buf[23] = Convert.ToByte((Convert.ToUInt16(RM692EX_G9.Value.ToString())) & 0xff);
                        Send_buf[24] = Convert.ToByte(Convert.ToUInt16(RM692EX_G10.Value.ToString()) >> 8);
                        Send_buf[25] = Convert.ToByte((Convert.ToUInt16(RM692EX_G10.Value.ToString())) & 0xff);
                        Send_buf[26] = Convert.ToByte(Convert.ToUInt16(RM692EX_G11.Value.ToString()) >> 8);
                        Send_buf[27] = Convert.ToByte((Convert.ToUInt16(RM692EX_G11.Value.ToString())) & 0xff);
                        Send_buf[28] = Convert.ToByte(Convert.ToUInt16(RM692EX_G12.Value.ToString()) >> 8);
                        Send_buf[29] = Convert.ToByte((Convert.ToUInt16(RM692EX_G12.Value.ToString())) & 0xff);
                        Send_buf[30] = Convert.ToByte(Convert.ToUInt16(RM692EX_G13.Value.ToString()) >> 8);
                        Send_buf[31] = Convert.ToByte((Convert.ToUInt16(RM692EX_G13.Value.ToString())) & 0xff);
                        Send_buf[32] = Convert.ToByte(Convert.ToUInt16(RM692EX_G14.Value.ToString()) >> 8);
                        Send_buf[33] = Convert.ToByte((Convert.ToUInt16(RM692EX_G14.Value.ToString())) & 0xff);
                        if (start_15gamma == false)
                        {
                            Send_buf[34] = Convert.ToByte(Convert.ToUInt16(RM692EX_G15.Value.ToString()) >> 8);
                            Send_buf[35] = Convert.ToByte((Convert.ToUInt16(RM692EX_G15.Value.ToString())) & 0xff);
                            Send_buf[36] = Convert.ToByte(Convert.ToUInt16(RM692EX_G16.Value.ToString()) >> 8);
                            Send_buf[37] = Convert.ToByte((Convert.ToUInt16(RM692EX_G16.Value.ToString())) & 0xff);
                            Send_buf[38] = Convert.ToByte(Convert.ToUInt16(RM692EX_G17.Value.ToString()) >> 8);
                            Send_buf[39] = Convert.ToByte((Convert.ToUInt16(RM692EX_G17.Value.ToString())) & 0xff);
                            Send_buf[40] = Convert.ToByte(Convert.ToUInt16(RM692EX_G18.Value.ToString()) >> 8);
                            Send_buf[41] = Convert.ToByte((Convert.ToUInt16(RM692EX_G18.Value.ToString())) & 0xff);
                            Send_buf[42] = Convert.ToByte(Convert.ToUInt16(RM692EX_G19.Value.ToString()) >> 8);
                            Send_buf[43] = Convert.ToByte((Convert.ToUInt16(RM692EX_G19.Value.ToString())) & 0xff);
                            Send_buf[44] = Convert.ToByte(Convert.ToUInt16(RM692EX_G20.Value.ToString()) >> 8);
                            Send_buf[45] = Convert.ToByte((Convert.ToUInt16(RM692EX_G20.Value.ToString())) & 0xff);
                            Send_buf[46] = Convert.ToByte(Convert.ToUInt16(RM692EX_G21.Value.ToString()) >> 8);
                            Send_buf[47] = Convert.ToByte((Convert.ToUInt16(RM692EX_G21.Value.ToString())) & 0xff);
                            Send_buf[48] = Convert.ToByte(Convert.ToUInt16(RM692EX_G22.Value.ToString()) >> 8);
                            Send_buf[49] = Convert.ToByte((Convert.ToUInt16(RM692EX_G22.Value.ToString())) & 0xff);
                            Send_buf[50] = Convert.ToByte(Convert.ToUInt16(RM692EX_G23.Value.ToString()) >> 8);
                            Send_buf[51] = Convert.ToByte((Convert.ToUInt16(RM692EX_G23.Value.ToString())) & 0xff);
                            Send_buf[52] = Convert.ToByte(Convert.ToUInt16(RM692EX_G24.Value.ToString()) >> 8);
                            Send_buf[53] = Convert.ToByte((Convert.ToUInt16(RM692EX_G24.Value.ToString())) & 0xff);
                            Send_buf[54] = Convert.ToByte(Convert.ToUInt16(RM692EX_G25.Value.ToString()) >> 8);
                            Send_buf[55] = Convert.ToByte((Convert.ToUInt16(RM692EX_G25.Value.ToString())) & 0xff);
                            Send_buf[56] = Convert.ToByte(Convert.ToUInt16(RM692EX_G26.Value.ToString()) >> 8);
                            Send_buf[57] = Convert.ToByte((Convert.ToUInt16(RM692EX_G26.Value.ToString())) & 0xff);
                        }
                    }
                    break;
                case "RM692EX_GammaW_B":     //      
                    {
                        Send_buf[1] = 0x03;
                        if (radioButton_Page50.Checked == true)
                        { Send_buf[3] = 0x80; }
                        else
                        { Send_buf[3] = 0x81; }
                        Send_buf[4] = Convert.ToByte(Convert.ToUInt16(RM692EX_B0.Value.ToString()) >> 8);
                        Send_buf[5] = Convert.ToByte((Convert.ToUInt16(RM692EX_B0.Value.ToString())) & 0xff);
                        Send_buf[6] = Convert.ToByte(Convert.ToUInt16(RM692EX_B1.Value.ToString()) >> 8);
                        Send_buf[7] = Convert.ToByte((Convert.ToUInt16(RM692EX_B1.Value.ToString())) & 0xff);
                        Send_buf[8] = Convert.ToByte(Convert.ToUInt16(RM692EX_B2.Value.ToString()) >> 8);
                        Send_buf[9] = Convert.ToByte((Convert.ToUInt16(RM692EX_B2.Value.ToString())) & 0xff);
                        Send_buf[10] = Convert.ToByte(Convert.ToUInt16(RM692EX_B3.Value.ToString()) >> 8);
                        Send_buf[11] = Convert.ToByte((Convert.ToUInt16(RM692EX_B3.Value.ToString())) & 0xff);
                        Send_buf[12] = Convert.ToByte(Convert.ToUInt16(RM692EX_B4.Value.ToString()) >> 8);
                        Send_buf[13] = Convert.ToByte((Convert.ToUInt16(RM692EX_B4.Value.ToString())) & 0xff);
                        Send_buf[14] = Convert.ToByte(Convert.ToUInt16(RM692EX_B5.Value.ToString()) >> 8);
                        Send_buf[15] = Convert.ToByte((Convert.ToUInt16(RM692EX_B5.Value.ToString())) & 0xff);
                        Send_buf[16] = Convert.ToByte(Convert.ToUInt16(RM692EX_B6.Value.ToString()) >> 8);
                        Send_buf[17] = Convert.ToByte((Convert.ToUInt16(RM692EX_B6.Value.ToString())) & 0xff);
                        Send_buf[18] = Convert.ToByte(Convert.ToUInt16(RM692EX_B7.Value.ToString()) >> 8);
                        Send_buf[19] = Convert.ToByte((Convert.ToUInt16(RM692EX_B7.Value.ToString())) & 0xff);
                        Send_buf[20] = Convert.ToByte(Convert.ToUInt16(RM692EX_B8.Value.ToString()) >> 8);
                        Send_buf[21] = Convert.ToByte((Convert.ToUInt16(RM692EX_B8.Value.ToString())) & 0xff);
                        Send_buf[22] = Convert.ToByte(Convert.ToUInt16(RM692EX_B9.Value.ToString()) >> 8);
                        Send_buf[23] = Convert.ToByte((Convert.ToUInt16(RM692EX_B9.Value.ToString())) & 0xff);
                        Send_buf[24] = Convert.ToByte(Convert.ToUInt16(RM692EX_B10.Value.ToString()) >> 8);
                        Send_buf[25] = Convert.ToByte((Convert.ToUInt16(RM692EX_B10.Value.ToString())) & 0xff);
                        Send_buf[26] = Convert.ToByte(Convert.ToUInt16(RM692EX_B11.Value.ToString()) >> 8);
                        Send_buf[27] = Convert.ToByte((Convert.ToUInt16(RM692EX_B11.Value.ToString())) & 0xff);
                        Send_buf[28] = Convert.ToByte(Convert.ToUInt16(RM692EX_B12.Value.ToString()) >> 8);
                        Send_buf[29] = Convert.ToByte((Convert.ToUInt16(RM692EX_B12.Value.ToString())) & 0xff);
                        Send_buf[30] = Convert.ToByte(Convert.ToUInt16(RM692EX_B13.Value.ToString()) >> 8);
                        Send_buf[31] = Convert.ToByte((Convert.ToUInt16(RM692EX_B13.Value.ToString())) & 0xff);
                        Send_buf[32] = Convert.ToByte(Convert.ToUInt16(RM692EX_B14.Value.ToString()) >> 8);
                        Send_buf[33] = Convert.ToByte((Convert.ToUInt16(RM692EX_B14.Value.ToString())) & 0xff);
                        if (start_15gamma == false)
                        {
                            Send_buf[34] = Convert.ToByte(Convert.ToUInt16(RM692EX_B15.Value.ToString()) >> 8);
                            Send_buf[35] = Convert.ToByte((Convert.ToUInt16(RM692EX_B15.Value.ToString())) & 0xff);
                            Send_buf[36] = Convert.ToByte(Convert.ToUInt16(RM692EX_B16.Value.ToString()) >> 8);
                            Send_buf[37] = Convert.ToByte((Convert.ToUInt16(RM692EX_B16.Value.ToString())) & 0xff);
                            Send_buf[38] = Convert.ToByte(Convert.ToUInt16(RM692EX_B17.Value.ToString()) >> 8);
                            Send_buf[39] = Convert.ToByte((Convert.ToUInt16(RM692EX_B17.Value.ToString())) & 0xff);
                            Send_buf[40] = Convert.ToByte(Convert.ToUInt16(RM692EX_B18.Value.ToString()) >> 8);
                            Send_buf[41] = Convert.ToByte((Convert.ToUInt16(RM692EX_B18.Value.ToString())) & 0xff);
                            Send_buf[42] = Convert.ToByte(Convert.ToUInt16(RM692EX_B19.Value.ToString()) >> 8);
                            Send_buf[43] = Convert.ToByte((Convert.ToUInt16(RM692EX_B19.Value.ToString())) & 0xff);
                            Send_buf[44] = Convert.ToByte(Convert.ToUInt16(RM692EX_B20.Value.ToString()) >> 8);
                            Send_buf[45] = Convert.ToByte((Convert.ToUInt16(RM692EX_B20.Value.ToString())) & 0xff);
                            Send_buf[46] = Convert.ToByte(Convert.ToUInt16(RM692EX_B21.Value.ToString()) >> 8);
                            Send_buf[47] = Convert.ToByte((Convert.ToUInt16(RM692EX_B21.Value.ToString())) & 0xff);
                            Send_buf[48] = Convert.ToByte(Convert.ToUInt16(RM692EX_B22.Value.ToString()) >> 8);
                            Send_buf[49] = Convert.ToByte((Convert.ToUInt16(RM692EX_B22.Value.ToString())) & 0xff);
                            Send_buf[50] = Convert.ToByte(Convert.ToUInt16(RM692EX_B23.Value.ToString()) >> 8);
                            Send_buf[51] = Convert.ToByte((Convert.ToUInt16(RM692EX_B23.Value.ToString())) & 0xff);
                            Send_buf[52] = Convert.ToByte(Convert.ToUInt16(RM692EX_B24.Value.ToString()) >> 8);
                            Send_buf[53] = Convert.ToByte((Convert.ToUInt16(RM692EX_B24.Value.ToString())) & 0xff);
                            Send_buf[54] = Convert.ToByte(Convert.ToUInt16(RM692EX_B25.Value.ToString()) >> 8);
                            Send_buf[55] = Convert.ToByte((Convert.ToUInt16(RM692EX_B25.Value.ToString())) & 0xff);
                            Send_buf[56] = Convert.ToByte(Convert.ToUInt16(RM692EX_B26.Value.ToString()) >> 8);
                            Send_buf[57] = Convert.ToByte((Convert.ToUInt16(RM692EX_B26.Value.ToString())) & 0xff);
                        }
                    }
                    break;
                default:
                    break;
            }
            if (start_15gamma == false)
            {
                CRCData.CalculateCrc16(Send_buf, out Send_buf[72], out Send_buf[73]);
            }
            else
            {
                CRCData.CalculateCrc16(Send_buf, out Send_buf[34], out Send_buf[35]);
            }
            try
            {
                if (start_15gamma == false)
                {
                    frmHelp.comPort.Write(Send_buf, 0, 74);   //RM69350
                }
                else
                {
                    frmHelp.comPort.Write(Send_buf, 0, 36); //3.92
                }
            }
            catch
            {
                MessageBox.Show("串口有误，请检查", "错误");
            }
            frmHelp.T1.Enabled = false;
            frmHelp.T1.Interval = 2000;
            frmHelp.T1.Enabled = true;
        }
        private void btn_RM692Ex_Calculate_Click(object sender, EventArgs e)
        {
            // double Lr_d, Lg_d, Lb_d;
            double L_X, L_Y, L_Z;
            string[] arr = RM692EX_Gamma_SetBox.Lines;
            {
                try
                {
                    Diven_Gamma.Clear();
                    Diven_Offset.Clear();
                    for (int i = 0; i < arr.Length; i++)
                    {
                        string line = arr[i];
                        line = line.Replace(" ", "");
                        if (line.Contains("TUNING_SPEC"))
                        {
                            line = line.Replace("TUNING_SPEC", "");
                            line = line.Replace("(", "");
                            line = line.Replace(")", "");
                            string[] arr0 = line.Split(',');
                            Setting.Gamma_Property Gamma = new Setting.Gamma_Property(Convert.ToInt32(arr0[0]), Convert.ToDouble(arr0[1]), Convert.ToDouble(arr0[2]), Convert.ToDouble(arr0[3]), Convert.ToDouble(arr0[4]));
                            Diven_Gamma.Add(Gamma);
                        }
                        else if (line.Contains("LXY_SPEC"))
                        {
                            line = line.Replace("LXY_SPEC", "");
                            line = line.Replace("(", "");
                            line = line.Replace(")", "");
                            string[] arr1 = line.Split(',');
                            //将Offset对象放入集合
                            Setting.Offset_Property Offset = new Setting.Offset_Property(Convert.ToInt32(arr1[0]), Convert.ToDouble(arr1[1]), Convert.ToDouble(arr1[2]), Convert.ToDouble(arr1[3]));
                            Diven_Offset.Add(Offset);
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("格式输入有误");
                }
            }
            //----------------------------------------------------------------------------
            try
            {
                txt2EX_lumoff.Text = Diven_Offset[0].LUM_OFF.ToString();
                txt2EX_Xoff.Text = Diven_Offset[0].X_OFF.ToString();
                txt2EX_Yoff.Text = Diven_Offset[0].Y_OFF.ToString();

                int Total_points = Diven_Gamma[0].Points_num;
                D_lums = new double[Total_points, 3];
                D_lum = new double[Total_points];
                txt2EX_Gamma.Text = Diven_Gamma[0].Curve.ToString();
                txt2EX_lum.Text = Diven_Gamma[0].Lum.ToString();
                txt2EX_X.Text = Diven_Gamma[0].X.ToString();
                txt2EX_Y.Text = Diven_Gamma[0].Y.ToString();
                Points_LV.Text = "";

                for (int i = 0; i < Total_points; i++)
                {   //Diven_Offset[p].NO 灰阶绑点       

                    D_lum[i] = (Math.Pow((Diven_Offset[i].NO / 255.0), Diven_Gamma[0].Curve) * Diven_Gamma[0].Lum); //每绑点目标亮度
                    Points_LV.Text = Points_LV.Text + Diven_Offset[i].NO + ":  " + Math.Round(D_lum[i], 6) + "\r\n";
                    CaSDKObj.Lvxy_to_XYZ(D_lum[i], Diven_Gamma[0].X, Diven_Gamma[0].Y, out L_X, out L_Y, out L_Z);//X/Z/Z转换
                    D_lums[i, 0] = L_X; //R/B/G分亮度计算
                    D_lums[i, 1] = L_Y;
                    D_lums[i, 2] = L_Z;
                }
            }
            catch
            {
                MessageBox.Show("格式输入有误");
            }

            btnCal_RM692EX_Position_Click(sender, e);
        }
        private void btnCal_RM692EX_Position_Click(object sender, EventArgs e)
        {
            lb_RM692EX_R0.Items[0] = lb_RM692EX_G0.Items[0] = lb_RM692EX_B0.Items[0] = Diven_Offset[14 - 0].NO;
            lb_RM692EX_R0.Items[1] = lb_RM692EX_G0.Items[1] = lb_RM692EX_B0.Items[1] = Diven_Offset[14 - 1].NO;
            lb_RM692EX_R0.Items[2] = lb_RM692EX_G0.Items[2] = lb_RM692EX_B0.Items[2] = Diven_Offset[14 - 2].NO;
            lb_RM692EX_R0.Items[3] = lb_RM692EX_G0.Items[3] = lb_RM692EX_B0.Items[3] = Diven_Offset[14 - 3].NO;
            lb_RM692EX_R0.Items[4] = lb_RM692EX_G0.Items[4] = lb_RM692EX_B0.Items[4] = Diven_Offset[14 - 4].NO;
            lb_RM692EX_R0.Items[5] = lb_RM692EX_G0.Items[5] = lb_RM692EX_B0.Items[5] = Diven_Offset[14 - 5].NO;
            lb_RM692EX_R0.Items[6] = lb_RM692EX_G0.Items[6] = lb_RM692EX_B0.Items[6] = Diven_Offset[14 - 6].NO;

            lb_RM692EX_R1.Items[0] = lb_RM692EX_G1.Items[0] = lb_RM692EX_B1.Items[0] = Diven_Offset[14 - 7].NO;
            lb_RM692EX_R1.Items[1] = lb_RM692EX_G1.Items[1] = lb_RM692EX_B1.Items[1] = Diven_Offset[14 - 8].NO;
            lb_RM692EX_R1.Items[2] = lb_RM692EX_G1.Items[2] = lb_RM692EX_B1.Items[2] = Diven_Offset[14 - 9].NO;
            lb_RM692EX_R1.Items[3] = lb_RM692EX_G1.Items[3] = lb_RM692EX_B1.Items[3] = Diven_Offset[14 - 10].NO;
            lb_RM692EX_R1.Items[4] = lb_RM692EX_G1.Items[4] = lb_RM692EX_B1.Items[4] = Diven_Offset[14 - 11].NO;
            lb_RM692EX_R1.Items[5] = lb_RM692EX_G1.Items[5] = lb_RM692EX_B1.Items[5] = Diven_Offset[14 - 12].NO;
            lb_RM692EX_R1.Items[6] = lb_RM692EX_G1.Items[6] = lb_RM692EX_B1.Items[6] = Diven_Offset[14 - 13].NO;

            lb_RM692EX_R2.Items[0] = lb_RM692EX_G2.Items[0] = lb_RM692EX_B2.Items[0] = Diven_Offset[14 - 14].NO;
        }
        private void Load_GammmPic(string filenames)      //双击 载入 BMP图片
        {
            Int32 HACT_True = 0;
            Int32 HACT_Skip = 0;
            Int32 VACT_True = 0;
            Int32 m_txlen = 0;
            Int32 j = 0;
            FileStream aFile;

            //byte[] TemFileContent = new byte[1024 * 100];
            byte[] TemFileContent = new byte[512 * 4000 + 100];
            System.Int32 ByteReaded = 0x00;

            string FileName = Gamma_loading_path.Text + '\\' + filenames + ".bmp";
            aFile = new FileStream(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            ByteReaded = aFile.Read(TemFileContent, 0, 54);

            HACT_True = ((TemFileContent[19]) << 8) + TemFileContent[18];
            VACT_True = ((TemFileContent[23] << 8) + TemFileContent[22]);

            HACT_Skip = HACT_True;
            try
            { //5a a5 9DF0731A-----提前下个标志位告诉下位机开始送图了，避免特殊图片格式导致错误配置
                TemFileContent[0] = 0xbd; TemFileContent[1] = 0x5a; TemFileContent[2] = 0xa5; TemFileContent[3] = 0x9d; TemFileContent[4] = 0xf0;
                frmHelp.comPort.Write(TemFileContent, 0, 5);
            }
            catch
            {
                MessageBox.Show("串口有误，请检查", "错误");
                return;
            }
            //-----------------------------------
            try
            {
                j = 1;
                aFile.Seek(54, SeekOrigin.Begin);
                while (j <= VACT_True)
                {
                    if (HACT_True % 4 != 0)
                        aFile.Seek((VACT_True - j) * (HACT_True * 3 + (HACT_True % 4)) + 54, SeekOrigin.Begin);
                    else
                        aFile.Seek((VACT_True - j) * HACT_True * 3 + 54, SeekOrigin.Begin);

                    ByteReaded = aFile.Read(TemFileContent, 0, HACT_True * 3); // 
                    try
                    {
                        frmHelp.comPort.Write(TemFileContent, 0, HACT_Skip * 3);
                    }
                    catch
                    {
                        MessageBox.Show("串口有误，请检查", "错误");
                        break;
                    }
                    m_txlen += ByteReaded;
                    j++;
                }

                TemFileContent[0] = 0x5A;
                try
                {
                    frmHelp.comPort.Write(TemFileContent, 0, 1);
                }
                catch
                {
                    MessageBox.Show("串口有误，请检查", "错误");
                    return;
                }
                aFile.Close();
            }
            catch
            {
                frmHelp.textBox1.Text += "啥图片都没显示";
                frmHelp.textBox1.Select(frmHelp.textBox1.Text.Length, 0);
                frmHelp.textBox1.ScrollToCaret();
            }
        }
        private static byte Gamma_Auto_flag_dll = 0;
        private int Multi_gamma_txt_now_index = 0;
        private int Multi_gamma_txt_next_index;
        private int Multi_gamma_txt_line_count = 0;
        private int Multi_gamma_group_index = 0;
        private void Btn_flexible_gamma_Click(object sender, EventArgs e)
        {
            RM692EX_GIR_State = 0; ;
            btn_RM692Ex_Calculate_Click(null, null);
            Multi_gamma_txt_now_index = 0;
            Multi_gamma_txt_line_count = this.RM692EX_Gamma_SetBox.Lines.GetUpperBound(0);
            Multi_flexible_gammas(Multi_gamma_txt_now_index, out Multi_gamma_txt_next_index);
        }
        private void btnAutoGamma_RM692EX_Click(object sender, EventArgs e)//255阶为例
        {
            double L_X, L_Y, L_Z;
            index = 0;
            flag1 = 1;
            flag2 = 1;
            flag3 = 1;

            //------------flexible gamma use------------------
            frmHelp.Gamma_auto_adjust_count = 0;
            Gamma_adjust_timeout_flag = false;
            //------------------------------------------------

            gamma_r = GAMMAs.RM692EX_Gamma_r;
            gamma_g = GAMMAs.RM692EX_Gamma_g;
            gamma_b = GAMMAs.RM692EX_Gamma_b;
            if (cBx_AOD_Auto_Gamma.Checked == true)  //AOD gamma adjust in AOD mode or not
            {
                Load_GammmPic(Diven_Offset[index].NO.ToString()); //Load pic
            }
            else
            {
                frmHelp.numPatternR.Value = Diven_Offset[index].NO;
                frmHelp.numPatternG.Value = Diven_Offset[index].NO;
                frmHelp.numPatternB.Value = Diven_Offset[index].NO;
                frmHelp.OLED_Show_Click(frmHelp.btnPatternW, e);
            }
            Thread.Sleep(50);
            T20.Enabled = true;
        }
        private void Multi_flexible_gammas(int txt_index, out int list_view_index)
        {
            string strLine = Convert.ToString(RM692EX_Gamma_SetBox.Text);
            string[] arr = strLine.Split(','); //以逗号分割，添加到数组
            string perline = string.Empty;
            string perline0 = string.Empty;
            list_view_index = 0;

            if (RM692EX_Gamma_SetBox.Text == string.Empty)
            {
                MessageBox.Show("内容为空!");
            }
            else  //标记关键事件
            {
                try
                {
                    arr = strLine.Split('\n'); //以逗号分割，添加到数
                    for (int i = txt_index; i < arr.Length;)  //获取的行数
                    {
                        perline = arr[i];
                        perline = perline.Replace(" ", "");
                        perline = perline.Replace(";", "");
                        perline = perline.Replace("(", "");
                        perline = perline.Replace(")", "");
                        perline = perline.Replace("\r", "");
                        perline = perline.ToUpper();

                        if (perline.Contains("REGW"))
                        {
                            perline = perline.Replace("REGW", "");
                            RM692EX_Reg_Data.Text = perline;
                            RM692EX_Others_Click(RM692EX_RegW, null);
                            Thread.Sleep(200);
                            i = i + 1;
                        }
                        else if (perline.Contains("AOD_IN"))
                        {
                            //   cBx_AOD_Auto_Gamma.Checked = true;
                            //  i = i + 1;
                        }
                        else if (perline.Contains("AOD_OUT"))
                        {
                            //  cBx_AOD_Auto_Gamma.Checked = false;
                            // i = i + 1;
                        }
                        else if (perline.Contains("SAVE"))
                        {
                            string pathsave_file = System.Environment.CurrentDirectory + "\\l_gamma";
                            if (Directory.Exists(pathsave_file) == false)
                            {
                                Directory.CreateDirectory(pathsave_file);
                            }
                            string pathsave = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + Multi_gamma_group_index.ToString() + ".csv";
                            Multi_SaveGamma(pathsave);
                            Thread.Sleep(50);
                            i = i + 1;
                        }
                        else if (perline.Contains("GAMMA_SET"))
                        {
                            frmHelp.cbxlogic_go.Checked = false;
                            perline = perline.Replace("GAMMA_SET", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            //VT6110_Gamma_Group.Value = Multi_gamma_group_index - 1;
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_Normal.Checked = true;
                            //    RM692EX_Exit_Gamma_Click(null, null);
                            RM692EX_Inter_Gamma_Click(null, null);
                            ArrayList list = new ArrayList();
                            do
                            {
                                i = i + 1;
                                perline = arr[i];
                                list.Add(perline + "\n");
                            } while (perline.Contains("GAMMA_TUNING") == false);
                            string[] gamma_set_lines = (string[])list.ToArray(typeof(string));
                            Text_Processing(gamma_set_lines);
                            try
                            {
                                string pathsave_file = System.Environment.CurrentDirectory + "\\l_gamma";
                                if (Directory.Exists(pathsave_file) == false)
                                {
                                    Directory.CreateDirectory(pathsave_file);
                                }
                                string pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + Multi_gamma_group_index.ToString() + ".csv";
                                Multi_LoadGamma(pathload);
                                Application.DoEvents();

                                RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                                Thread.Sleep(20);
                            }
                            catch {; }
                            if (Total_points > 15)
                            {
                                //  rbt_VT6110_P25.Checked = true;
                            }
                            else
                            {
                                // rbt_VT6110_IRC.Checked = true;
                            }
                            btnAutoGamma_RM692EX_Click(null, null); //替换成相应IC的自动gamma启动函数名
                            list_view_index = i;
                            break;
                        }
                        else if (perline.Contains("AOD_SET"))
                        {
                            frmHelp.cbxlogic_go.Checked = true;
                            perline = perline.Replace("AOD_SET", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            //VT6110_Gamma_Group.Value = Multi_gamma_group_index - 1;
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_Normal.Checked = true;
                            //    RM692EX_Exit_Gamma_Click(null, null);
                            RM692EX_Inter_Gamma_Click(null, null);
                            ArrayList list = new ArrayList();
                            do
                            {
                                i = i + 1;
                                perline = arr[i];
                                list.Add(perline + "\n");
                            } while (perline.Contains("GAMMA_TUNING") == false);
                            string[] gamma_set_lines = (string[])list.ToArray(typeof(string));
                            Text_Processing(gamma_set_lines);
                            try
                            {
                                string pathsave_file = System.Environment.CurrentDirectory + "\\l_gamma";
                                if (Directory.Exists(pathsave_file) == false)
                                {
                                    Directory.CreateDirectory(pathsave_file);
                                }
                                string pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + Multi_gamma_group_index.ToString() + ".csv";
                                Multi_LoadGamma(pathload);
                                Application.DoEvents();

                                RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                                Thread.Sleep(20);
                            }
                            catch {; }
                            if (Total_points > 15)
                            {
                                //  rbt_VT6110_P25.Checked = true;
                            }
                            else
                            {
                                // rbt_VT6110_IRC.Checked = true;
                            }
                            btnAutoGamma_RM692EX_Click(null, null); //替换成相应IC的自动gamma启动函数名
                            list_view_index = i;
                            break;
                        }
                        else if (perline.Contains("UDC_SET"))
                        {
                            frmHelp.cbxlogic_go.Checked = true;
                            perline = perline.Replace("UDC_SET", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            //VT6110_Gamma_Group.Value = Multi_gamma_group_index - 1;
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_UDC.Checked = true;
                            RM692EX_Inter_Gamma_Click(null, null);
                            ArrayList list = new ArrayList();
                            do
                            {
                                i = i + 1;
                                perline = arr[i];
                                list.Add(perline + "\n");
                            } while (perline.Contains("GAMMA_TUNING") == false);
                            string[] gamma_set_lines = (string[])list.ToArray(typeof(string));
                            Text_Processing(gamma_set_lines);
                            try
                            {
                                string pathsave_file = System.Environment.CurrentDirectory + "\\l_gamma";
                                if (Directory.Exists(pathsave_file) == false)
                                {
                                    Directory.CreateDirectory(pathsave_file);
                                }
                                string pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + Multi_gamma_group_index.ToString() + ".csv";
                                Multi_LoadGamma(pathload);
                                Application.DoEvents();

                                RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                                Thread.Sleep(20);
                            }
                            catch {; }
                            if (Total_points > 15)
                            {
                                //  rbt_VT6110_P25.Checked = true;
                            }
                            else
                            {
                                // rbt_VT6110_IRC.Checked = true;
                            }
                            btnAutoGamma_RM692EX_Click(null, null); //替换成相应IC的自动gamma启动函数名
                            list_view_index = i;
                            break;
                        }
                        else if (perline.Contains("CUP_SET"))
                        {
                            frmHelp.cbxlogic_go.Checked = false;
                            perline = perline.Replace("CUP_SET", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            //VT6110_Gamma_Group.Value = Multi_gamma_group_index - 1;
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_UDC.Checked = true;
                            RM692EX_Inter_Gamma_Click(null, null);
                            ArrayList list = new ArrayList();
                            do
                            {
                                i = i + 1;
                                perline = arr[i];
                                list.Add(perline + "\n");
                            } while (perline.Contains("GAMMA_TUNING") == false);
                            string[] gamma_set_lines = (string[])list.ToArray(typeof(string));
                            Text_Processing(gamma_set_lines);
                            try
                            {
                                string pathsave_file = System.Environment.CurrentDirectory + "\\l_gamma";
                                if (Directory.Exists(pathsave_file) == false)
                                {
                                    Directory.CreateDirectory(pathsave_file);
                                }
                                string pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + Multi_gamma_group_index.ToString() + ".csv";
                                Multi_LoadGamma(pathload);
                                Application.DoEvents();

                                RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                                Thread.Sleep(20);
                                RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                                Thread.Sleep(20);
                            }
                            catch {; }
                            if (Total_points > 15)
                            {
                                //  rbt_VT6110_P25.Checked = true;
                            }
                            else
                            {
                                // rbt_VT6110_IRC.Checked = true;
                            }
                            btnAutoGamma_RM692EX_Click(null, null); //替换成相应IC的自动gamma启动函数名
                            list_view_index = i;
                            break;
                        }
                        else if (perline.Contains("GAMMA_CAL"))
                        {
                            perline = perline.Replace("GAMMA_CAL", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            //VT6110_Gamma_Group.Value = Multi_gamma_group_index - 1;
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_Normal.Checked = true;
                            RM692EX_Inter_Gamma_Click(null, null);
                            UDC694_Gamma_Linear_interpolation(Convert.ToInt32(Gamma_Band_Select.Text));

                            RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                            Thread.Sleep(20);
                            RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                            Thread.Sleep(20);
                            RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                            Thread.Sleep(20);
                            list_view_index = i;
                        }
                        else if (perline.Contains("UDC_CAL"))
                        {
                            perline = perline.Replace("UDC_CAL", "");
                            perline = perline.Replace("_", "");
                            Multi_gamma_group_index = Convert.ToInt32(perline);
                            Gamma_Band_Select.Text = Multi_gamma_group_index.ToString();
                            rBt_RM692EX_UDC.Checked = true;
                            RM692EX_Inter_Gamma_Click(null, null);
                            UDC694_Gamma_Linear_interpolation(Convert.ToInt32(Gamma_Band_Select.Text));

                            RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                            Thread.Sleep(20);
                            RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                            Thread.Sleep(20);
                            RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                            Thread.Sleep(20);
                            list_view_index = i;
                        }

                        else if (perline.Contains("EXITGAMMA"))
                        {
                            RM692EX_Exit_Gamma_Click(null, null);
                            i = i + 1;
                        }
                        else
                        {
                            i = i + 1;
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("输入格式有误！");
                }
            }
        }
        private void Multi_SaveGamma(string path)
        {
            try
            {
                string str = "保存Gamma文件";
                StreamWriter sw = null; //文件流
                sw = new StreamWriter(path, false, Encoding.UTF8);
                str = str + "R0," + RM692EX_R0.Text + "," + "G0," + RM692EX_G0.Text + "," + "B0," + RM692EX_B0.Text + "\r\n";
                str = str + "R1," + RM692EX_R1.Text + "," + "G1," + RM692EX_G1.Text + "," + "B1," + RM692EX_B1.Text + "\r\n";
                str = str + "R2," + RM692EX_R2.Text + "," + "G2," + RM692EX_G2.Text + "," + "B2," + RM692EX_B2.Text + "\r\n";
                str = str + "R3," + RM692EX_R3.Text + "," + "G3," + RM692EX_G3.Text + "," + "B3," + RM692EX_B3.Text + "\r\n";
                str = str + "R4," + RM692EX_R4.Text + "," + "G4," + RM692EX_G4.Text + "," + "B4," + RM692EX_B4.Text + "\r\n";
                str = str + "R5," + RM692EX_R5.Text + "," + "G5," + RM692EX_G5.Text + "," + "B5," + RM692EX_B5.Text + "\r\n";
                str = str + "R6," + RM692EX_R6.Text + "," + "G6," + RM692EX_G6.Text + "," + "B6," + RM692EX_B6.Text + "\r\n";
                str = str + "R7," + RM692EX_R7.Text + "," + "G7," + RM692EX_G7.Text + "," + "B7," + RM692EX_B7.Text + "\r\n";
                str = str + "R8," + RM692EX_R8.Text + "," + "G8," + RM692EX_G8.Text + "," + "B8," + RM692EX_B8.Text + "\r\n";
                str = str + "R9," + RM692EX_R9.Text + "," + "G9," + RM692EX_G9.Text + "," + "B9," + RM692EX_B9.Text + "\r\n";
                str = str + "R10," + RM692EX_R10.Text + "," + "G10," + RM692EX_G10.Text + "," + "B10," + RM692EX_B10.Text + "\r\n";
                str = str + "R11," + RM692EX_R11.Text + "," + "G11," + RM692EX_G11.Text + "," + "B11," + RM692EX_B11.Text + "\r\n";
                str = str + "R12," + RM692EX_R12.Text + "," + "G12," + RM692EX_G12.Text + "," + "B12," + RM692EX_B12.Text + "\r\n";
                str = str + "R13," + RM692EX_R13.Text + "," + "G13," + RM692EX_G13.Text + "," + "B13," + RM692EX_B13.Text + "\r\n";
                str = str + "R14," + RM692EX_R14.Text + "," + "G14," + RM692EX_G14.Text + "," + "B14," + RM692EX_B14.Text + "\r\n";
                str = str + "R15," + RM692EX_R15.Text + "," + "G15," + RM692EX_G15.Text + "," + "B15," + RM692EX_B15.Text + "\r\n";
                str = str + "R16," + RM692EX_R16.Text + "," + "G16," + RM692EX_G16.Text + "," + "B16," + RM692EX_B16.Text + "\r\n";
                str = str + "R17," + RM692EX_R17.Text + "," + "G17," + RM692EX_G17.Text + "," + "B17," + RM692EX_B17.Text + "\r\n";
                str = str + "R18," + RM692EX_R18.Text + "," + "G18," + RM692EX_G18.Text + "," + "B18," + RM692EX_B18.Text + "\r\n";
                str = str + "R19," + RM692EX_R19.Text + "," + "G19," + RM692EX_G19.Text + "," + "B19," + RM692EX_B19.Text + "\r\n";
                str = str + "R20," + RM692EX_R20.Text + "," + "G20," + RM692EX_G20.Text + "," + "B20," + RM692EX_B20.Text + "\r\n";
                str = str + "R21," + RM692EX_R21.Text + "," + "G21," + RM692EX_G21.Text + "," + "B21," + RM692EX_B21.Text + "\r\n";
                str = str + "R22," + RM692EX_R22.Text + "," + "G22," + RM692EX_G22.Text + "," + "B22," + RM692EX_B22.Text + "\r\n";
                str = str + "R23," + RM692EX_R23.Text + "," + "G23," + RM692EX_G23.Text + "," + "B23," + RM692EX_B23.Text + "\r\n";
                str = str + "R24," + RM692EX_R24.Text + "," + "G24," + RM692EX_G24.Text + "," + "B24," + RM692EX_B24.Text + "\r\n";
                str = str + "R25," + RM692EX_R25.Text + "," + "G25," + RM692EX_G25.Text + "," + "B25," + RM692EX_B25.Text + "\r\n";
                str = str + "R26," + RM692EX_R26.Text + "," + "G26," + RM692EX_G26.Text + "," + "B26," + RM692EX_B26.Text + "\r\n";
                sw.WriteLine(str);
                sw.Dispose(); //释放资源
                sw.Close(); //关闭数据流
            }
            catch
            {
                MessageBox.Show("Gamma保存时发生错误，请再试！", "系统提示：");
            }
        } //
        private void Text_Processing(string[] txt_path)
        {
            double L_X, L_Y, L_Z;
            string[] arr = txt_path;
            {
                try
                {
                    Diven_Gamma.Clear();
                    Diven_Offset.Clear();
                    for (int i = 0; i < arr.Length; i++)
                    {
                        string line = arr[i];
                        line = line.Replace(" ", "");
                        if (line.Contains("TUNING_SPEC"))
                        {
                            line = line.Replace("TUNING_SPEC", "");
                            line = line.Replace("(", "");
                            line = line.Replace(")", "");
                            string[] arr0 = line.Split(',');
                            Setting.Gamma_Property Gamma = new Setting.Gamma_Property(Convert.ToInt32(arr0[0]), Convert.ToDouble(arr0[1]), Convert.ToDouble(arr0[2]), Convert.ToDouble(arr0[3]), Convert.ToDouble(arr0[4]));
                            Diven_Gamma.Add(Gamma);
                        }
                        else if (line.Contains("LXY_SPEC"))
                        {
                            line = line.Replace("LXY_SPEC", "");
                            line = line.Replace("(", "");
                            line = line.Replace(")", "");
                            string[] arr1 = line.Split(',');
                            //将Offset对象放入集合
                            Setting.Offset_Property Offset = new Setting.Offset_Property(Convert.ToInt32(arr1[0]), Convert.ToDouble(arr1[1]), Convert.ToDouble(arr1[2]), Convert.ToDouble(arr1[3]));
                            Diven_Offset.Add(Offset);
                        }
                    }
                }
                catch
                {
                    MessageBox.Show("格式输入有误");
                }
            }
            try  //获取调整spec
            {
                txt2EX_lumoff.Text = Diven_Offset[0].LUM_OFF.ToString();
                txt2EX_Xoff.Text = Diven_Offset[0].X_OFF.ToString();
                txt2EX_Yoff.Text = Diven_Offset[0].Y_OFF.ToString();

                Total_points = Diven_Gamma[0].Points_num;
                D_lums = new double[Total_points, 3];
                D_lum = new double[Total_points];

                txt2EX_Gamma.Text = Diven_Gamma[0].Curve.ToString();
                txt2EX_lum.Text = Diven_Gamma[0].Lum.ToString();
                txt2EX_X.Text = Diven_Gamma[0].X.ToString();
                txt2EX_Y.Text = Diven_Gamma[0].Y.ToString();

                for (int i = 0; i < Total_points; i++)
                {   //Diven_Offset[p].NO 灰阶绑点                 
                    D_lum[i] = (Math.Pow((Diven_Offset[i].NO / 255.0), Diven_Gamma[0].Curve) * Diven_Gamma[0].Lum); //每绑点目标亮度
                    CaSDKObj.Lvxy_to_XYZ(D_lum[i], Diven_Gamma[0].X, Diven_Gamma[0].Y, out L_X, out L_Y, out L_Z);//X/Z/Z转换
                    D_lums[i, 0] = L_X; //R/B/G分亮度计算
                    D_lums[i, 1] = L_Y;
                    D_lums[i, 2] = L_Z;
                }
            }
            catch
            {
                MessageBox.Show("格式输入有误");
            }
        }
        //Gamma自动载入
        private void Multi_LoadGamma(string path)
        {
            string strtmp = "";
            //读取文本信息
            FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
            StreamReader streamReader = new StreamReader(fs, Encoding.GetEncoding("GBK"));
            streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
            string strLine = streamReader.ReadLine();
            //循环读取文本信息
            while (!string.IsNullOrEmpty(strLine))
            {
                strtmp = strtmp + strLine + ",";
                strLine = streamReader.ReadLine(); //循环读取下一行
            }
            fs.Close(); //关闭流
            streamReader.Close();
            string[] arrtmp = strtmp.Split(new Char[] { ',' });
            RM692EX_R0.Text = arrtmp[1].ToString(); RM692EX_G0.Text = arrtmp[3].ToString(); RM692EX_B0.Text = arrtmp[5].ToString();
            RM692EX_R1.Text = arrtmp[7].ToString(); RM692EX_G1.Text = arrtmp[9].ToString(); RM692EX_B1.Text = arrtmp[11].ToString();
            RM692EX_R2.Text = arrtmp[13].ToString(); RM692EX_G2.Text = arrtmp[15].ToString(); RM692EX_B2.Text = arrtmp[17].ToString();
            RM692EX_R3.Text = arrtmp[19].ToString(); RM692EX_G3.Text = arrtmp[21].ToString(); RM692EX_B3.Text = arrtmp[23].ToString();
            RM692EX_R4.Text = arrtmp[25].ToString(); RM692EX_G4.Text = arrtmp[27].ToString(); RM692EX_B4.Text = arrtmp[29].ToString();
            RM692EX_R5.Text = arrtmp[31].ToString(); RM692EX_G5.Text = arrtmp[33].ToString(); RM692EX_B5.Text = arrtmp[35].ToString();
            RM692EX_R6.Text = arrtmp[37].ToString(); RM692EX_G6.Text = arrtmp[39].ToString(); RM692EX_B6.Text = arrtmp[41].ToString();
            RM692EX_R7.Text = arrtmp[43].ToString(); RM692EX_G7.Text = arrtmp[45].ToString(); RM692EX_B7.Text = arrtmp[47].ToString();
            RM692EX_R8.Text = arrtmp[49].ToString(); RM692EX_G8.Text = arrtmp[51].ToString(); RM692EX_B8.Text = arrtmp[53].ToString();
            RM692EX_R9.Text = arrtmp[55].ToString(); RM692EX_G9.Text = arrtmp[57].ToString(); RM692EX_B9.Text = arrtmp[59].ToString();
            RM692EX_R10.Text = arrtmp[61].ToString(); RM692EX_G10.Text = arrtmp[63].ToString(); RM692EX_B10.Text = arrtmp[65].ToString();
            RM692EX_R11.Text = arrtmp[67].ToString(); RM692EX_G11.Text = arrtmp[69].ToString(); RM692EX_B11.Text = arrtmp[71].ToString();
            RM692EX_R12.Text = arrtmp[73].ToString(); RM692EX_G12.Text = arrtmp[75].ToString(); RM692EX_B12.Text = arrtmp[77].ToString();
            RM692EX_R13.Text = arrtmp[79].ToString(); RM692EX_G13.Text = arrtmp[81].ToString(); RM692EX_B13.Text = arrtmp[83].ToString();
            RM692EX_R14.Text = arrtmp[85].ToString(); RM692EX_G14.Text = arrtmp[87].ToString(); RM692EX_B14.Text = arrtmp[89].ToString();
            RM692EX_R15.Text = arrtmp[91].ToString(); RM692EX_G15.Text = arrtmp[93].ToString(); RM692EX_B15.Text = arrtmp[95].ToString();
            RM692EX_R16.Text = arrtmp[97].ToString(); RM692EX_G16.Text = arrtmp[99].ToString(); RM692EX_B16.Text = arrtmp[101].ToString();
            RM692EX_R17.Text = arrtmp[103].ToString(); RM692EX_G17.Text = arrtmp[105].ToString(); RM692EX_B17.Text = arrtmp[107].ToString();
            RM692EX_R18.Text = arrtmp[109].ToString(); RM692EX_G18.Text = arrtmp[111].ToString(); RM692EX_B18.Text = arrtmp[113].ToString();
            RM692EX_R19.Text = arrtmp[115].ToString(); RM692EX_G19.Text = arrtmp[117].ToString(); RM692EX_B19.Text = arrtmp[119].ToString();
            RM692EX_R20.Text = arrtmp[121].ToString(); RM692EX_G20.Text = arrtmp[123].ToString(); RM692EX_B20.Text = arrtmp[125].ToString();
            RM692EX_R21.Text = arrtmp[127].ToString(); RM692EX_G21.Text = arrtmp[129].ToString(); RM692EX_B21.Text = arrtmp[131].ToString();
            RM692EX_R22.Text = arrtmp[133].ToString(); RM692EX_G22.Text = arrtmp[135].ToString(); RM692EX_B22.Text = arrtmp[137].ToString();
            RM692EX_R23.Text = arrtmp[139].ToString(); RM692EX_G23.Text = arrtmp[141].ToString(); RM692EX_B23.Text = arrtmp[143].ToString();
            RM692EX_R24.Text = arrtmp[145].ToString(); RM692EX_G24.Text = arrtmp[147].ToString(); RM692EX_B24.Text = arrtmp[149].ToString();
            RM692EX_R25.Text = arrtmp[151].ToString(); RM692EX_G25.Text = arrtmp[153].ToString(); RM692EX_B25.Text = arrtmp[155].ToString();
            RM692EX_R26.Text = arrtmp[157].ToString(); RM692EX_G26.Text = arrtmp[159].ToString(); RM692EX_B26.Text = arrtmp[161].ToString();
        }
        private void UDC694_Gamma_Linear_interpolation(int gamma_band)
        {
            int gamma_front = gamma_band + 1;
            string pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + gamma_front.ToString() + ".csv";
            Multi_LoadGamma(pathload);
            Application.DoEvents();
            decimal[] gamma_front_red_reg = new decimal[15] { RM692EX_R0.Value, RM692EX_R1.Value, RM692EX_R2.Value, RM692EX_R3.Value, RM692EX_R4.Value,
                                                              RM692EX_R5.Value, RM692EX_R6.Value, RM692EX_R7.Value, RM692EX_R8.Value, RM692EX_R9.Value,
                                                              RM692EX_R10.Value, RM692EX_R11.Value,RM692EX_R12.Value, RM692EX_R13.Value, RM692EX_R14.Value};
            decimal[] gamma_front_green_reg = new decimal[15] { RM692EX_G0.Value, RM692EX_G1.Value, RM692EX_G2.Value, RM692EX_G3.Value, RM692EX_G4.Value,
                                                                RM692EX_G5.Value, RM692EX_G6.Value, RM692EX_G7.Value, RM692EX_G8.Value, RM692EX_G9.Value,
                                                                RM692EX_G10.Value, RM692EX_G11.Value,RM692EX_G12.Value, RM692EX_G13.Value, RM692EX_G14.Value};
            decimal[] gamma_front_blue_reg = new decimal[15] { RM692EX_B0.Value, RM692EX_B1.Value, RM692EX_B2.Value, RM692EX_B3.Value, RM692EX_B4.Value,
                                                               RM692EX_B5.Value, RM692EX_B6.Value, RM692EX_B7.Value, RM692EX_B8.Value, RM692EX_B9.Value,
                                                               RM692EX_B10.Value, RM692EX_B11.Value,RM692EX_B12.Value, RM692EX_B13.Value, RM692EX_B14.Value};

            RM692EX_R14.Text = ((int)(((double)(gamma_front_red_reg[14]) - (double)(gamma_front_red_reg[13])) / (239 - 207) * (0.8166 * 255 - 207) + (double)(gamma_front_red_reg[13]))).ToString();
            RM692EX_R13.Text = ((int)(((double)(gamma_front_red_reg[13]) - (double)(gamma_front_red_reg[12])) / (207 - 143) * (0.8166 * 239 - 143) + (double)(gamma_front_red_reg[12]))).ToString();
            RM692EX_R12.Text = ((int)(((double)(gamma_front_red_reg[13]) - (double)(gamma_front_red_reg[12])) / (207 - 143) * (0.8166 * 207 - 143) + (double)(gamma_front_red_reg[12]))).ToString();
            RM692EX_R11.Text = ((int)(((double)(gamma_front_red_reg[12]) - (double)(gamma_front_red_reg[11])) / (143 - 111) * (0.8166 * 143 - 111) + (double)(gamma_front_red_reg[11]))).ToString();
            RM692EX_R10.Text = ((int)(((double)(gamma_front_red_reg[11]) - (double)(gamma_front_red_reg[10])) / (111 - 79) * (0.8166 * 111 - 79) + (double)(gamma_front_red_reg[10]))).ToString();
            RM692EX_R9.Text = ((int)(((double)(gamma_front_red_reg[10]) - (double)(gamma_front_red_reg[9])) / (79 - 63) * (0.8166 * 79 - 63) + (double)(gamma_front_red_reg[9]))).ToString();
            RM692EX_R8.Text = ((int)(((double)(gamma_front_red_reg[9]) - (double)(gamma_front_red_reg[8])) / (63 - 47) * (0.8166 * 63 - 47) + (double)(gamma_front_red_reg[8]))).ToString();
            RM692EX_R7.Text = ((int)(((double)(gamma_front_red_reg[8]) - (double)(gamma_front_red_reg[7])) / (47 - 31) * (0.8166 * 47 - 31) + (double)(gamma_front_red_reg[7]))).ToString();
            RM692EX_R6.Text = ((int)(((double)(gamma_front_red_reg[7]) - (double)(gamma_front_red_reg[6])) / (31 - 23) * (0.8166 * 31 - 23) + (double)(gamma_front_red_reg[6]))).ToString();
            RM692EX_R5.Text = ((int)(((double)(gamma_front_red_reg[6]) - (double)(gamma_front_red_reg[5])) / (23 - 15) * (0.8166 * 23 - 15) + (double)(gamma_front_red_reg[5]))).ToString();
            RM692EX_R4.Text = ((int)(((double)(gamma_front_red_reg[5]) - (double)(gamma_front_red_reg[4])) / (15 - 7) * (0.8166 * 15 - 7) + (double)(gamma_front_red_reg[4]))).ToString();
            RM692EX_R3.Text = ((int)(((double)(gamma_front_red_reg[4]) - (double)(gamma_front_red_reg[3])) / (7 - 3) * (0.8166 * 7 - 3) + (double)(gamma_front_red_reg[3]))).ToString();
            RM692EX_R2.Text = ((int)(((double)(gamma_front_red_reg[3]) - (double)(gamma_front_red_reg[2])) / (3 - 1) * (0.8166 * 3 - 1) + (double)(gamma_front_red_reg[2]))).ToString();
            RM692EX_R1.Text = ((int)(((double)(gamma_front_red_reg[2]) - (double)(gamma_front_red_reg[1])) / (1 - 0) * (0.8166 * 1 - 0) + (double)(gamma_front_red_reg[1]))).ToString();
            RM692EX_R0.Text = "0";

            RM692EX_G14.Text = ((int)(((double)(gamma_front_green_reg[14]) - (double)(gamma_front_green_reg[13])) / (239 - 207) * (0.8166 * 255 - 207) + (double)(gamma_front_green_reg[13]))).ToString();
            RM692EX_G13.Text = ((int)(((double)(gamma_front_green_reg[13]) - (double)(gamma_front_green_reg[12])) / (207 - 143) * (0.8166 * 239 - 143) + (double)(gamma_front_green_reg[12]))).ToString();
            RM692EX_G12.Text = ((int)(((double)(gamma_front_green_reg[13]) - (double)(gamma_front_green_reg[12])) / (207 - 143) * (0.8166 * 207 - 143) + (double)(gamma_front_green_reg[12]))).ToString();
            RM692EX_G11.Text = ((int)(((double)(gamma_front_green_reg[12]) - (double)(gamma_front_green_reg[11])) / (143 - 111) * (0.8166 * 143 - 111) + (double)(gamma_front_green_reg[11]))).ToString();
            RM692EX_G10.Text = ((int)(((double)(gamma_front_green_reg[11]) - (double)(gamma_front_green_reg[10])) / (111 - 79) * (0.8166 * 111 - 79) + (double)(gamma_front_green_reg[10]))).ToString();
            RM692EX_G9.Text = ((int)(((double)(gamma_front_green_reg[10]) - (double)(gamma_front_green_reg[9])) / (79 - 63) * (0.8166 * 79 - 63) + (double)(gamma_front_green_reg[9]))).ToString();
            RM692EX_G8.Text = ((int)(((double)(gamma_front_green_reg[9]) - (double)(gamma_front_green_reg[8])) / (63 - 47) * (0.8166 * 63 - 47) + (double)(gamma_front_green_reg[8]))).ToString();
            RM692EX_G7.Text = ((int)(((double)(gamma_front_green_reg[8]) - (double)(gamma_front_green_reg[7])) / (47 - 31) * (0.8166 * 47 - 31) + (double)(gamma_front_green_reg[7]))).ToString();
            RM692EX_G6.Text = ((int)(((double)(gamma_front_green_reg[7]) - (double)(gamma_front_green_reg[6])) / (31 - 23) * (0.8166 * 31 - 23) + (double)(gamma_front_green_reg[6]))).ToString();
            RM692EX_G5.Text = ((int)(((double)(gamma_front_green_reg[6]) - (double)(gamma_front_green_reg[5])) / (23 - 15) * (0.8166 * 23 - 15) + (double)(gamma_front_green_reg[5]))).ToString();
            RM692EX_G4.Text = ((int)(((double)(gamma_front_green_reg[5]) - (double)(gamma_front_green_reg[4])) / (15 - 7) * (0.8166 * 15 - 7) + (double)(gamma_front_green_reg[4]))).ToString();
            RM692EX_G3.Text = ((int)(((double)(gamma_front_green_reg[4]) - (double)(gamma_front_green_reg[3])) / (7 - 3) * (0.8166 * 7 - 3) + (double)(gamma_front_green_reg[3]))).ToString();
            RM692EX_G2.Text = ((int)(((double)(gamma_front_green_reg[3]) - (double)(gamma_front_green_reg[2])) / (3 - 1) * (0.8166 * 3 - 1) + (double)(gamma_front_green_reg[2]))).ToString();
            RM692EX_G1.Text = ((int)(((double)(gamma_front_green_reg[2]) - (double)(gamma_front_green_reg[1])) / (1 - 0) * (0.8166 * 1 - 0) + (double)(gamma_front_green_reg[1]))).ToString();
            RM692EX_G0.Text = "0";

            RM692EX_B14.Text = ((int)(((double)(gamma_front_blue_reg[14]) - (double)(gamma_front_blue_reg[13])) / (239 - 207) * (0.8166 * 255 - 207) + (double)(gamma_front_blue_reg[13]))).ToString();
            RM692EX_B13.Text = ((int)(((double)(gamma_front_blue_reg[13]) - (double)(gamma_front_blue_reg[12])) / (207 - 143) * (0.8166 * 239 - 143) + (double)(gamma_front_blue_reg[12]))).ToString();
            RM692EX_B12.Text = ((int)(((double)(gamma_front_blue_reg[13]) - (double)(gamma_front_blue_reg[12])) / (207 - 143) * (0.8166 * 207 - 143) + (double)(gamma_front_blue_reg[12]))).ToString();
            RM692EX_B11.Text = ((int)(((double)(gamma_front_blue_reg[12]) - (double)(gamma_front_blue_reg[11])) / (143 - 111) * (0.8166 * 143 - 111) + (double)(gamma_front_blue_reg[11]))).ToString();
            RM692EX_B10.Text = ((int)(((double)(gamma_front_blue_reg[11]) - (double)(gamma_front_blue_reg[10])) / (111 - 79) * (0.8166 * 111 - 79) + (double)(gamma_front_blue_reg[10]))).ToString();
            RM692EX_B9.Text = ((int)(((double)(gamma_front_blue_reg[10]) - (double)(gamma_front_blue_reg[9])) / (79 - 63) * (0.8166 * 79 - 63) + (double)(gamma_front_blue_reg[9]))).ToString();
            RM692EX_B8.Text = ((int)(((double)(gamma_front_blue_reg[9]) - (double)(gamma_front_blue_reg[8])) / (63 - 47) * (0.8166 * 63 - 47) + (double)(gamma_front_blue_reg[8]))).ToString();
            RM692EX_B7.Text = ((int)(((double)(gamma_front_blue_reg[8]) - (double)(gamma_front_blue_reg[7])) / (47 - 31) * (0.8166 * 47 - 31) + (double)(gamma_front_blue_reg[7]))).ToString();
            RM692EX_B6.Text = ((int)(((double)(gamma_front_blue_reg[7]) - (double)(gamma_front_blue_reg[6])) / (31 - 23) * (0.8166 * 31 - 23) + (double)(gamma_front_blue_reg[6]))).ToString();
            RM692EX_B5.Text = ((int)(((double)(gamma_front_blue_reg[6]) - (double)(gamma_front_blue_reg[5])) / (23 - 15) * (0.8166 * 23 - 15) + (double)(gamma_front_blue_reg[5]))).ToString();
            RM692EX_B4.Text = ((int)(((double)(gamma_front_blue_reg[5]) - (double)(gamma_front_blue_reg[4])) / (15 - 7) * (0.8166 * 15 - 7) + (double)(gamma_front_blue_reg[4]))).ToString();
            RM692EX_B3.Text = ((int)(((double)(gamma_front_blue_reg[4]) - (double)(gamma_front_blue_reg[3])) / (7 - 3) * (0.8166 * 7 - 3) + (double)(gamma_front_blue_reg[3]))).ToString();
            RM692EX_B2.Text = ((int)(((double)(gamma_front_blue_reg[3]) - (double)(gamma_front_blue_reg[2])) / (3 - 1) * (0.8166 * 3 - 1) + (double)(gamma_front_blue_reg[2]))).ToString();
            RM692EX_B1.Text = ((int)(((double)(gamma_front_blue_reg[2]) - (double)(gamma_front_blue_reg[1])) / (1 - 0) * (0.8166 * 1 - 0) + (double)(gamma_front_blue_reg[1]))).ToString();
            RM692EX_B0.Text = "0";
            Application.DoEvents();

            pathload = System.Environment.CurrentDirectory + "\\l_gamma" + "\\gamma" + gamma_band.ToString() + ".csv";
            Multi_SaveGamma(pathload);

        }
        private void RM692EX_AUTO_gamma(Object myObject, EventArgs myEventArgs)
        {
            double L_X, L_Y, L_Z, lumr, lumg, lumb;
            frmHelp.Msr_CASDK();

            if (Gamma_adjust_timeout_flag == true)//如果是0绑点
            {
                flag1 = 0;
                flag2 = 0;
                flag3 = 0;
            }
            else
            {
                if ((frmHelp.CASDK_LUM < (D_lum[index] + D_lum[index] * Diven_Offset[index].LUM_OFF / 100)) && (frmHelp.CASDK_LUM > (D_lum[index] - D_lum[index] * Diven_Offset[index].LUM_OFF / 100)))//G
                { flag1 = 0; }
                else
                { flag1 = 1; }
                if ((frmHelp.CASDK_x < (Diven_Gamma[0].X + Diven_Offset[index].X_OFF)) && (frmHelp.CASDK_x > (Diven_Gamma[0].X - Diven_Offset[index].X_OFF)) && flag1 == 0)//R
                { flag3 = 0; }
                else
                { flag3 = 1; }
                if ((frmHelp.CASDK_y < (Diven_Gamma[0].Y + Diven_Offset[index].Y_OFF)) && (frmHelp.CASDK_y > (Diven_Gamma[0].Y - Diven_Offset[index].Y_OFF)) && flag1 == 0 && flag3 == 0)//B
                { flag2 = 0; }
                else
                { flag2 = 1; }
            }

            if (flag1 == 0 && flag2 == 0 && flag3 == 0)
            {
                T20.Enabled = false;
                //reset-----
                Gamma_adjust_timeout_flag = false;
                frmHelp.Gamma_auto_adjust_count = 0;
                //--------
                index++;

                if (index == Diven_Gamma[0].Points_num)
                {
                    frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX gamma调试完毕!\r\n";
                    //---------------------------------add-------------------------------------
                    if (Multi_gamma_txt_next_index < Multi_gamma_txt_line_count)
                    {
                        Multi_gamma_txt_now_index = Multi_gamma_txt_next_index;
                        Multi_flexible_gammas(Multi_gamma_txt_now_index, out Multi_gamma_txt_next_index);
                    }
                    //---------------------------------add-------------------------------------
                    if (RM692EX_GIR_State == 1)
                    {
                        RM692EX_GIR_State = 2;
                        RM692EX_GIR_FullScreen_TUNING(null, null);
                    }
                }

                if (index < Diven_Gamma[0].Points_num) //绑点切换部分
                {
                    if (cBx_AOD_Auto_Gamma.Checked == true)  //AOD gamma adjust in AOD mode or not
                    {
                        Load_GammmPic(Diven_Offset[index].NO.ToString()); //Load pic
                    }
                    else
                    {
                        frmHelp.numPatternR.Value = Diven_Offset[index].NO;//固定255灰阶
                        frmHelp.numPatternG.Value = Diven_Offset[index].NO;
                        frmHelp.numPatternB.Value = Diven_Offset[index].NO;
                        Application.DoEvents();
                        frmHelp.OLED_Show_Click(frmHelp.btnPatternW, null);//写入Pattern参数
                    }
                    Thread.Sleep(50);
                    frmHelp.Msr_CASDK();
                    T20.Enabled = true;
                    flag1 = 1;
                    flag2 = 1;
                    flag3 = 1;
                }

            }
            else  //调整部分
            {
                decimal r = 0, g = 0, b = 0;
                CaSDKObj.Lvxy_to_XYZ(frmHelp.CASDK_LUM, frmHelp.CASDK_x, frmHelp.CASDK_y, out L_X, out L_Y, out L_Z);
                lumr = L_X;
                lumg = L_Y;
                lumb = L_Z;
                try
                {
                    switch (index)
                    {
                        case 0: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = 180;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R14.Value, RM692EX_G14.Value, RM692EX_B14.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R14.Value = r;
                                RM692EX_G14.Value = g;
                                RM692EX_B14.Value = b;
                                if (RM692EX_R14.Value <= RM692EX_R13.Value)
                                {
                                    RM692EX_R13.Value = r - 5;
                                }
                                else if (RM692EX_R14.Value - RM692EX_R13.Value > 0xf0)
                                {
                                    RM692EX_R13.Value = RM692EX_R14.Value - 0xf0;
                                }
                                if (RM692EX_G14.Value <= RM692EX_G13.Value)
                                {
                                    RM692EX_G13.Value = g - 5;
                                }
                                else if (RM692EX_G14.Value - RM692EX_G13.Value > 0xf0)
                                {
                                    RM692EX_G13.Value = RM692EX_G14.Value - 0xf0;
                                }
                                if (RM692EX_B14.Value <= RM692EX_B13.Value)
                                {
                                    RM692EX_B13.Value = b - 5;
                                }
                                else if (RM692EX_B14.Value - RM692EX_B13.Value > 0xf0)
                                {
                                    RM692EX_B13.Value = RM692EX_B14.Value - 0xf0;
                                }
                            }
                            break;
                        case 1: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = lumg < 10 ? 35 : 70;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R13.Value, RM692EX_G13.Value, RM692EX_B13.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R13.Value = r;
                                RM692EX_G13.Value = g;
                                RM692EX_B13.Value = b;
                                if (RM692EX_R13.Value <= RM692EX_R12.Value)
                                {
                                    RM692EX_R12.Value = r - 5;
                                }
                                else if (RM692EX_R13.Value - RM692EX_R12.Value > 0xf0)
                                {
                                    RM692EX_R12.Value = RM692EX_R13.Value - 0xf0;
                                }
                                if (RM692EX_G13.Value <= RM692EX_G12.Value)
                                {
                                    RM692EX_G12.Value = g - 5;
                                }
                                else if (RM692EX_G13.Value - RM692EX_G12.Value > 0xf0)
                                {
                                    RM692EX_G12.Value = RM692EX_G13.Value - 0xf0;
                                }
                                if (RM692EX_B13.Value <= RM692EX_B12.Value)
                                {
                                    RM692EX_B12.Value = b - 5;
                                }
                                else if (RM692EX_B13.Value - RM692EX_B12.Value > 0xf0)
                                {
                                    RM692EX_B12.Value = RM692EX_B13.Value - 0xf0;
                                }
                            }
                            break;
                        case 2: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R12.Value, RM692EX_G12.Value, RM692EX_B12.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R12.Value = r;
                                RM692EX_G12.Value = g;
                                RM692EX_B12.Value = b;
                                if (RM692EX_R12.Value <= RM692EX_R11.Value)
                                {
                                    RM692EX_R11.Value = r - 5;
                                }
                                else if (RM692EX_R12.Value - RM692EX_R11.Value > 0xf0)
                                {
                                    RM692EX_R11.Value = RM692EX_R12.Value - 0xf0;
                                }
                                if (RM692EX_G12.Value <= RM692EX_G11.Value)
                                {
                                    RM692EX_G11.Value = g - 5;
                                }
                                else if (RM692EX_G12.Value - RM692EX_G11.Value > 0xf0)
                                {
                                    RM692EX_G11.Value = RM692EX_G12.Value - 0xf0;
                                }
                                if (RM692EX_B12.Value <= RM692EX_B11.Value)
                                {
                                    RM692EX_B11.Value = b - 5;
                                }
                                else if (RM692EX_B12.Value - RM692EX_B11.Value > 0xf0)
                                {
                                    RM692EX_B11.Value = RM692EX_B12.Value - 0xf0;
                                }
                            }
                            break;
                        case 3: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = lumg < 10 ? 25 : 70;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R11.Value, RM692EX_G11.Value, RM692EX_B11.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R11.Value = r;
                                RM692EX_G11.Value = g;
                                RM692EX_B11.Value = b;
                                if (RM692EX_R11.Value <= RM692EX_R10.Value)
                                {
                                    RM692EX_R10.Value = r - 5;
                                }
                                else if (RM692EX_R11.Value - RM692EX_R10.Value > 0xf0)
                                {
                                    RM692EX_R10.Value = RM692EX_R11.Value - 0xf0;
                                }
                                if (RM692EX_G11.Value <= RM692EX_G10.Value)
                                {
                                    RM692EX_G10.Value = g - 5;
                                }
                                else if (RM692EX_G11.Value - RM692EX_G10.Value > 0xf0)
                                {
                                    RM692EX_G10.Value = RM692EX_G11.Value - 0xf0;
                                }
                                if (RM692EX_B11.Value <= RM692EX_B10.Value)
                                {
                                    RM692EX_B10.Value = b - 5;
                                }
                                else if (RM692EX_B11.Value - RM692EX_B10.Value > 0xf0)
                                {
                                    RM692EX_B10.Value = RM692EX_B11.Value - 0xf0;
                                }
                            }
                            break;
                        case 4: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R10.Value, RM692EX_G10.Value, RM692EX_B10.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R10.Value = r;
                                RM692EX_G10.Value = g;
                                RM692EX_B10.Value = b;
                                if (RM692EX_R10.Value <= RM692EX_R9.Value)
                                {
                                    RM692EX_R9.Value = r - 5;
                                }
                                else if (RM692EX_R10.Value - RM692EX_R9.Value > 0xf0)
                                {
                                    RM692EX_R9.Value = RM692EX_R10.Value - 0xf0;
                                }
                                if (RM692EX_G10.Value <= RM692EX_G9.Value)
                                {
                                    RM692EX_G9.Value = g - 5;
                                }
                                else if (RM692EX_G10.Value - RM692EX_G9.Value > 0xf0)
                                {
                                    RM692EX_G9.Value = RM692EX_G10.Value - 0xf0;
                                }
                                if (RM692EX_B10.Value <= RM692EX_B9.Value)
                                {
                                    RM692EX_B9.Value = b - 5;
                                }
                                else if (RM692EX_B10.Value - RM692EX_B9.Value > 0xf0)
                                {
                                    RM692EX_B9.Value = RM692EX_B10.Value - 0xf0;
                                }
                            }
                            break;
                        case 5: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R9.Value, RM692EX_G9.Value, RM692EX_B9.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R9.Value = r;
                                RM692EX_G9.Value = g;
                                RM692EX_B9.Value = b;
                                if (RM692EX_R9.Value <= RM692EX_R8.Value)
                                {
                                    RM692EX_R8.Value = r - 5;
                                }
                                else if (RM692EX_R9.Value - RM692EX_R8.Value > 0xf0)
                                {
                                    RM692EX_R8.Value = RM692EX_R9.Value - 0xf0;
                                }
                                if (RM692EX_G9.Value <= RM692EX_G8.Value)
                                {
                                    RM692EX_G8.Value = g - 5;
                                }
                                else if (RM692EX_G9.Value - RM692EX_G8.Value > 0xf0)
                                {
                                    RM692EX_G8.Value = RM692EX_G9.Value - 0xf0;
                                }
                                if (RM692EX_B9.Value <= RM692EX_B8.Value)
                                {
                                    RM692EX_B8.Value = b - 5;
                                }
                                else if (RM692EX_B9.Value - RM692EX_B8.Value > 0xf0)
                                {
                                    RM692EX_B8.Value = RM692EX_B9.Value - 0xf0;
                                }
                            }
                            break;
                        case 6: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R8.Value, RM692EX_G8.Value, RM692EX_B8.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R8.Value = r;
                                RM692EX_G8.Value = g;
                                RM692EX_B8.Value = b;
                                if (RM692EX_R8.Value <= RM692EX_R7.Value)
                                {
                                    RM692EX_R7.Value = r - 5;
                                }
                                else if (RM692EX_R8.Value - RM692EX_R7.Value > 0xf0)
                                {
                                    RM692EX_R7.Value = RM692EX_R8.Value - 0xf0;
                                }
                                if (RM692EX_G8.Value <= RM692EX_G7.Value)
                                {
                                    RM692EX_G7.Value = g - 5;
                                }
                                else if (RM692EX_G8.Value - RM692EX_G7.Value > 0xf0)
                                {
                                    RM692EX_G7.Value = RM692EX_G8.Value - 0xf0;
                                }
                                if (RM692EX_B8.Value <= RM692EX_B7.Value)
                                {
                                    RM692EX_B7.Value = b - 5;
                                }
                                else if (RM692EX_B8.Value - RM692EX_B7.Value > 0xf0)
                                {
                                    RM692EX_B7.Value = RM692EX_B8.Value - 0xf0;
                                }
                            }
                            break;
                        case 7: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = lumg < 10 ? 25 : 65;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R7.Value, RM692EX_G7.Value, RM692EX_B7.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R7.Value = r;
                                RM692EX_G7.Value = g;
                                RM692EX_B7.Value = b;
                                if (RM692EX_R7.Value <= RM692EX_R6.Value)
                                {
                                    RM692EX_R6.Value = r - 5;
                                }
                                else if (RM692EX_R7.Value - RM692EX_R6.Value > 0xf0)
                                {
                                    RM692EX_R6.Value = RM692EX_R7.Value - 0xf0;
                                }
                                if (RM692EX_G7.Value <= RM692EX_G6.Value)
                                {
                                    RM692EX_G6.Value = g - 5;
                                }
                                else if (RM692EX_G7.Value - RM692EX_G6.Value > 0xf0)
                                {
                                    RM692EX_G6.Value = RM692EX_G7.Value - 0xf0;
                                }
                                if (RM692EX_B7.Value <= RM692EX_B6.Value)
                                {
                                    RM692EX_B6.Value = b - 5;
                                }
                                else if (RM692EX_B7.Value - RM692EX_B6.Value > 0xf0)
                                {
                                    RM692EX_B6.Value = RM692EX_B7.Value - 0xf0;
                                }
                            }
                            break;
                        case 8: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R6.Value, RM692EX_G6.Value, RM692EX_B6.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R6.Value = r;
                                RM692EX_G6.Value = g;
                                RM692EX_B6.Value = b;
                                if (RM692EX_R6.Value <= RM692EX_R5.Value)
                                {
                                    RM692EX_R5.Value = r - 5;
                                }
                                else if (RM692EX_R6.Value - RM692EX_R5.Value > 0xf0)
                                {
                                    RM692EX_R5.Value = RM692EX_R6.Value - 0xf0;
                                }
                                if (RM692EX_G6.Value <= RM692EX_G5.Value)
                                {
                                    RM692EX_G5.Value = g - 5;
                                }
                                else if (RM692EX_G6.Value - RM692EX_G5.Value > 0xf0)
                                {
                                    RM692EX_G5.Value = RM692EX_G6.Value - 0xf0;
                                }
                                if (RM692EX_B6.Value <= RM692EX_B5.Value)
                                {
                                    RM692EX_B5.Value = b - 5;
                                }
                                else if (RM692EX_B6.Value - RM692EX_B5.Value > 0xf0)
                                {
                                    RM692EX_B5.Value = RM692EX_B6.Value - 0xf0;
                                }
                            }
                            break;
                        case 9: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R5.Value, RM692EX_G5.Value, RM692EX_B5.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R5.Value = r;
                                RM692EX_G5.Value = g;
                                RM692EX_B5.Value = b;
                                if (RM692EX_R5.Value <= RM692EX_R4.Value)
                                {
                                    RM692EX_R4.Value = r - 5;
                                }
                                else if (RM692EX_R5.Value - RM692EX_R4.Value > 0xf0)
                                {
                                    RM692EX_R4.Value = RM692EX_R5.Value - 0xf0;
                                }
                                if (RM692EX_G5.Value <= RM692EX_G4.Value)
                                {
                                    RM692EX_G4.Value = g - 5;
                                }
                                else if (RM692EX_G5.Value - RM692EX_G4.Value > 0xf0)
                                {
                                    RM692EX_G4.Value = RM692EX_G5.Value - 0xf0;
                                }
                                if (RM692EX_B5.Value <= RM692EX_B4.Value)
                                {
                                    RM692EX_B4.Value = b - 5;
                                }
                                else if (RM692EX_B5.Value - RM692EX_B4.Value > 0xf0)
                                {
                                    RM692EX_B4.Value = RM692EX_B5.Value - 0xf0;
                                }
                                //  RM692EX_auto_gamma_write(gamma_r[index], Convert.ToUInt16(RM692EX_R5.Value), gamma_g[index], Convert.ToUInt16(RM692EX_G5.Value), gamma_b[index], Convert.ToUInt16(RM692EX_B5.Value));
                            }
                            break;
                        case 10: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R4.Value, RM692EX_G4.Value, RM692EX_B4.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R4.Value = r;
                                RM692EX_G4.Value = g;
                                RM692EX_B4.Value = b;
                                if (RM692EX_R4.Value <= RM692EX_R3.Value)
                                {
                                    RM692EX_R3.Value = r - 5;
                                }
                                else if (RM692EX_R4.Value - RM692EX_R3.Value > 0xf0)
                                {
                                    RM692EX_R3.Value = RM692EX_R4.Value - 0xf0;
                                }
                                if (RM692EX_G4.Value <= RM692EX_G3.Value)
                                {
                                    RM692EX_G3.Value = g - 5;
                                }
                                else if (RM692EX_G4.Value - RM692EX_G3.Value > 0xf0)
                                {
                                    RM692EX_G3.Value = RM692EX_G4.Value - 0xf0;
                                }
                                if (RM692EX_B4.Value <= RM692EX_B3.Value)
                                {
                                    RM692EX_B3.Value = b - 5;
                                }
                                else if (RM692EX_B4.Value - RM692EX_B3.Value > 0xf0)
                                {
                                    RM692EX_B3.Value = RM692EX_B4.Value - 0xf0;
                                }
                                //  RM692EX_auto_gamma_write(gamma_r[index], Convert.ToUInt16(RM692EX_R4.Value), gamma_g[index], Convert.ToUInt16(RM692EX_G4.Value), gamma_b[index], Convert.ToUInt16(RM692EX_B4.Value));
                            }
                            break;
                        case 11: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = lumg < 10 ? 20 : 55;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R3.Value, RM692EX_G3.Value, RM692EX_B3.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R3.Value = r;
                                RM692EX_G3.Value = g;
                                RM692EX_B3.Value = b;
                                // RM692EX_auto_gamma_write(gamma_r[index], Convert.ToUInt16(RM692EX_R3.Value), gamma_g[index], Convert.ToUInt16(RM692EX_G3.Value), gamma_b[index], Convert.ToUInt16(RM692EX_B3.Value));
                            }
                            if (RM692EX_R3.Value <= RM692EX_R2.Value)
                            {
                                RM692EX_R2.Value = r - 1;
                            }
                            else if (RM692EX_R3.Value - RM692EX_R2.Value > 0xf0)
                            {
                                RM692EX_R2.Value = RM692EX_R3.Value - 0xf0;
                            }
                            if (RM692EX_G3.Value <= RM692EX_G2.Value)
                            {
                                RM692EX_G2.Value = g - 1;
                            }
                            else if (RM692EX_G3.Value - RM692EX_G2.Value > 0xf0)
                            {
                                RM692EX_G2.Value = RM692EX_G3.Value - 0xf0;
                            }
                            if (RM692EX_B3.Value <= RM692EX_B2.Value)
                            {
                                RM692EX_B2.Value = b - 1;
                            }
                            else if (RM692EX_B3.Value - RM692EX_B2.Value > 0xf0)
                            {
                                RM692EX_B2.Value = RM692EX_B3.Value - 0xf0;
                            }
                            break;
                        case 12: //9
                            {
                                frmHelp.Gamma_auto_adjust_count_set = lumg < 10 ? 15 : 40;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R2.Value, RM692EX_G2.Value, RM692EX_B2.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R2.Value = r;
                                RM692EX_G2.Value = g;
                                RM692EX_B2.Value = b;
                                if (RM692EX_R2.Value <= RM692EX_R1.Value)
                                {
                                    RM692EX_R1.Value = r - 1;
                                }
                                else if (RM692EX_R2.Value - RM692EX_R1.Value > 0xf0)
                                {
                                    RM692EX_R1.Value = RM692EX_R2.Value - 0xf0;
                                }
                                if (RM692EX_G2.Value <= RM692EX_G1.Value)
                                {
                                    RM692EX_G1.Value = g - 1;
                                }
                                else if (RM692EX_G2.Value - RM692EX_G1.Value > 0xf0)
                                {
                                    RM692EX_G1.Value = RM692EX_G2.Value - 0xf0;
                                }
                                if (RM692EX_B2.Value <= RM692EX_B1.Value)
                                {
                                    RM692EX_B1.Value = b - 1;
                                }
                                else if (RM692EX_B2.Value - RM692EX_B1.Value > 0xf0)
                                {
                                    RM692EX_B1.Value = RM692EX_B2.Value - 0xf0;
                                }
                                //  RM692EX_auto_gamma_write(gamma_r[index], Convert.ToUInt16(RM692EX_R2.Value), gamma_g[index], Convert.ToUInt16(RM692EX_G2.Value), gamma_b[index], Convert.ToUInt16(RM692EX_B2.Value));
                            }
                            break;
                        case 13: //9
                            {
                                Gamma_adjust_timeout_flag = true;
                                //  frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_R1.Value, RM692EX_G1.Value, RM692EX_B1.Value, Diven_Offset[index].NO, 0xfff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_R1.Value = (int)RM692EX_R2.Value / 2;
                                RM692EX_G1.Value = (int)RM692EX_G2.Value / 2;
                                RM692EX_B1.Value = (int)RM692EX_B2.Value / 2;

                                if (RM692EX_R2.Value - RM692EX_R1.Value > 0xff)
                                {
                                    RM692EX_R1.Value = RM692EX_R2.Value - 0xfe;
                                }
                                if (RM692EX_G2.Value - RM692EX_G1.Value > 0xff)
                                {
                                    RM692EX_G1.Value = RM692EX_G2.Value - 0xfe;
                                }
                                if (RM692EX_B2.Value - RM692EX_B1.Value > 0xff)
                                {
                                    RM692EX_B1.Value = RM692EX_B2.Value - 0xfe;
                                }
                                //  RM692EX_auto_gamma_write(gamma_r[index], Convert.ToUInt16(RM692EX_R1.Value), gamma_g[index], Convert.ToUInt16(RM692EX_G1.Value), gamma_b[index], Convert.ToUInt16(RM692EX_B1.Value));
                            }
                            break;
                        case 14: //
                            {
                                Gamma_adjust_timeout_flag = true;
                                RM692EX_R0.Value = 0;
                                RM692EX_G0.Value = 0;
                                RM692EX_B0.Value = 0;
                                Application.DoEvents();
                            }
                            break;
                        default: break;
                    }
                    //RM692EX_auto_gamma_write(gamma_r[14-index], (ushort)(r), gamma_g[14-index], (ushort)(g), gamma_b[14-index], (ushort)(b));
                    RM692EX_Gamma_Click(RM692EX_GammaW_R, null);
                    Thread.Sleep(20);
                    RM692EX_Gamma_Click(RM692EX_GammaW_G, null);
                    Thread.Sleep(20);
                    RM692EX_Gamma_Click(RM692EX_GammaW_B, null);
                    Thread.Sleep(20);

                }
                catch
                {
                    T20.Enabled = false;
                    MessageBox.Show("数值超限！");
                }
            }
        }
        private void RM692EX_AUTO_LUM(Object myObject, EventArgs myEventArgs)
        {//大白纯亮度
            double L_X, L_Y, L_Z, lumr, lumg, lumb;
            frmHelp.Msr_CASDK();

            if (Gamma_adjust_timeout_flag == true)//如果是0绑点
            {
                flag1 = 0;
            }
            else
            {
                if ((frmHelp.CASDK_LUM < (D_lum[index] + D_lum[index] * Diven_Offset[index].LUM_OFF / 100)) && (frmHelp.CASDK_LUM > (D_lum[index] - D_lum[index] * Diven_Offset[index].LUM_OFF / 100)))//G
                { flag1 = 0; }
                else
                { flag1 = 1; }
            }

            if (flag1 == 0)
            {
                T20.Enabled = false;
                //reset-----
                Gamma_adjust_timeout_flag = false;
                frmHelp.Gamma_auto_adjust_count = 0;
                frmHelp.Gamma_auto_adjust_count_set = 100;
                //--------
                index++;

                if (index == Diven_Gamma[0].Points_num)
                {
                    frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX 大白亮度调试完毕!\r\n";
                    //---------------------------------add-------------------------------------
                    RM692EX_GIR_State = 3;
                    RM692EX_GIR_FullScreen_TUNING(null, null);
                    //---------------------------------add-------------------------------------
                }

                if (index < Diven_Gamma[0].Points_num) //绑点切换部分
                {
                    frmHelp.numPatternR.Value = Diven_Offset[index].NO;//固定255灰阶
                    frmHelp.numPatternG.Value = Diven_Offset[index].NO;
                    frmHelp.numPatternB.Value = Diven_Offset[index].NO;
                    Application.DoEvents();
                    frmHelp.OLED_Show_Click(frmHelp.btnPatternW, null);//写入Pattern参数
                    Thread.Sleep(50);
                    frmHelp.Msr_CASDK();
                    T20.Enabled = true;
                    flag1 = 1;
                }
            }
            else  //调整部分
            {
                decimal r = 0, g = 0, b = 0;
                CaSDKObj.Lvxy_to_XYZ(frmHelp.CASDK_LUM, frmHelp.CASDK_x, frmHelp.CASDK_y, out L_X, out L_Y, out L_Z);
                lumr = L_X;
                lumg = L_Y;
                lumb = L_Z;
                try
                {
                    switch (index)
                    {
                        case 0: //9
                            {
                                decimal RM692EX_HFZ = RM692EX_GIR_26H.Value * 255 + RM692EX_GIR_27H.Value;
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, 0, 0, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], 0, RM692EX_HFZ, 0, Diven_Offset[index].NO, 0x3ff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0;
                                }
                                RM692EX_HFZ = g;
                                RM692EX_GIR_26H.Value = (int)(g) >> 8;
                                RM692EX_GIR_27H.Value = (int)(g) & 0x0ff;
                            }
                            break;
                        default: break;
                    }
                    RM692EX_Others_Click(btn_RM692EX_GIR_SET, null);
                    Thread.Sleep(50);
                }
                catch
                {
                    //    T20.Enabled = false;
                    //    MessageBox.Show("数值超限！");
                }
            }
        }
        private void RM692EX_AUTO_GIR(Object myObject, EventArgs myEventArgs)
        {
            double L_X, L_Y, L_Z, lumr, lumg, lumb;
            frmHelp.Msr_CASDK();

            if (Gamma_adjust_timeout_flag == true)//如果是0绑点
            {
                flag1 = 0;
                flag2 = 0;
                flag3 = 0;
            }
            else
            {
                if ((frmHelp.CASDK_LUM < (D_lum[index] + D_lum[index] * Diven_Offset[index].LUM_OFF / 100)) && (frmHelp.CASDK_LUM > (D_lum[index] - D_lum[index] * Diven_Offset[index].LUM_OFF / 100)))//G
                { flag1 = 0; }
                else
                { flag1 = 1; }
                if ((frmHelp.CASDK_x < (Diven_Gamma[0].X + Diven_Offset[index].X_OFF)) && (frmHelp.CASDK_x > (Diven_Gamma[0].X - Diven_Offset[index].X_OFF)) && flag1 == 0)//R
                { flag3 = 0; }
                else
                { flag3 = 1; }
                if ((frmHelp.CASDK_y < (Diven_Gamma[0].Y + Diven_Offset[index].Y_OFF)) && (frmHelp.CASDK_y > (Diven_Gamma[0].Y - Diven_Offset[index].Y_OFF)) && flag1 == 0 && flag3 == 0)//B
                { flag2 = 0; }
                else
                { flag2 = 1; }
            }

            if (flag1 == 0 && flag2 == 0 && flag3 == 0)
            {
                T20.Enabled = false;
                //reset-----
                Gamma_adjust_timeout_flag = false;
                frmHelp.Gamma_auto_adjust_count = 0;
                frmHelp.Gamma_auto_adjust_count_set = 180;
                //--------
                index++;

                if (index == Diven_Gamma[0].Points_num)
                {
                    frmHelp.textBox1.Text = frmHelp.textBox1.Text + "RM692EX 大白调试完毕!\r\n";
                    //---------------------------------add-------------------------------------
                    frmHelp.textBox1.Text = frmHelp.textBox1.Text + "大小白亮度Check！\r\n";
                    RM692EX_GIR_CHECK(null, null);
                    //---------------------------------add-------------------------------------
                }

                if (index < Diven_Gamma[0].Points_num) //绑点切换部分
                {
                    if (cBx_AOD_Auto_Gamma.Checked == true)  //AOD gamma adjust in AOD mode or not
                    {
                        Load_GammmPic(Diven_Offset[index].NO.ToString()); //Load pic
                    }
                    else
                    {
                        frmHelp.numPatternR.Value = Diven_Offset[index].NO;//固定255灰阶
                        frmHelp.numPatternG.Value = Diven_Offset[index].NO;
                        frmHelp.numPatternB.Value = Diven_Offset[index].NO;
                        Application.DoEvents();
                        frmHelp.OLED_Show_Click(frmHelp.btnPatternW, null);//写入Pattern参数
                    }
                    Thread.Sleep(50);
                    frmHelp.Msr_CASDK();
                    T20.Enabled = true;
                    flag1 = 1;
                    flag2 = 1;
                    flag3 = 1;
                }

            }
            else  //调整部分
            {
                decimal r = 0, g = 0, b = 0;
                CaSDKObj.Lvxy_to_XYZ(frmHelp.CASDK_LUM, frmHelp.CASDK_x, frmHelp.CASDK_y, out L_X, out L_Y, out L_Z);
                lumr = L_X;
                lumg = L_Y;
                lumb = L_Z;
                try
                {
                    switch (index)
                    {
                        case 0: //9
                            {
                                frmHelp.Flexible_Gamma_auto_Adujst(flag1, flag3, flag2, lumg, lumr, lumb, D_lums[index, 1], D_lums[index, 0], D_lums[index, 2], RM692EX_GIR_R.Value, RM692EX_GIR_G.Value, RM692EX_GIR_B.Value, Diven_Offset[index].NO, 0xff, out r, out g, out b, out Gamma_adjust_timeout_flag);
                                if (Gamma_adjust_timeout_flag == true)
                                {
                                    flag1 = 0; flag3 = 0; flag2 = 0;
                                }
                                RM692EX_GIR_R.Value = r;
                                RM692EX_GIR_G.Value = g;
                                RM692EX_GIR_B.Value = b;
                            }
                            break;
                        default: break;
                    }
                    RM692EX_Others_Click(btn_RM692EX_GIR_SET, null);
                    Thread.Sleep(50);
                }
                catch
                {
                    //    T20.Enabled = false;
                    //    MessageBox.Show("数值超限！");
                }
            }
        }
        private void RM692EX_auto_gamma_write(UInt16 addr, UInt16 datar, UInt16 addg, UInt16 datag, UInt16 addb, UInt16 Datab)//一组gamma写入
        {
            Send_buf = new byte[17];
            Setting.TempRecord.cmdLen = 17;

            Send_buf[0] = RM692EX_info.ID;//RM692EX
            if (radioButton_Page50.Checked == true)
            {
                Send_buf[1] = 0x05; //register normal gamma
            }
            //else
            //{
            //    Send_buf[1] = 0xDD; //register 
            //}
            Send_buf[2] = 12; //length

            Send_buf[3] = Convert.ToByte(addr >> 8);
            Send_buf[4] = Convert.ToByte(datar >> 8);
            Send_buf[5] = Convert.ToByte(addr & 0xff);
            Send_buf[6] = Convert.ToByte(datar & 0xff);
            Send_buf[7] = Convert.ToByte(addg >> 8);
            Send_buf[8] = Convert.ToByte(datag >> 8);
            Send_buf[9] = Convert.ToByte(addg & 0xff);
            Send_buf[10] = Convert.ToByte(datag & 0xff);
            Send_buf[11] = Convert.ToByte(addb >> 8);
            Send_buf[12] = Convert.ToByte(Datab >> 8);
            Send_buf[13] = Convert.ToByte(addb & 0xff);
            Send_buf[14] = Convert.ToByte(Datab & 0xff);
            CRCData.CalculateCrc16(Send_buf, out Send_buf[15], out Send_buf[16]);
            try
            {
                frmHelp.comPort.Write(Send_buf, 0, 17);
            }
            catch
            {
                MessageBox.Show("串口有误，请检查", "错误");
                return;
            }
        }
        private void RM692EX_trackBar_Scroll(object sender, EventArgs e)
        {
            int bits_51h = Convert.ToInt16(Math.Pow(2, Convert.ToByte(RM692EX_51h_Bits.Text))) - 1;
            label_RM692EX_trackBar.Text = bits_51h + "阶";
            RM692EX_trackBar.Maximum = bits_51h;

            RM692EX_Reg_Data.Text = "fe,00";
            RM692EX_Others_Click(RM692EX_RegW, e);
            if (bits_51h < 0x100)
            {
                RM692EX_Reg_Data.Text = "51," + RM692EX_trackBar.Value.ToString("x2");
            }
            else
            {
                RM692EX_Reg_Data.Text = "51" + "," + RM692EX_trackBar.Value.ToString("x4").Substring(0, 2) + "," + RM692EX_trackBar.Value.ToString("x4").Substring(2, 2);
            }
            RM692EX_Others_Click(RM692EX_RegW, e);
        }
        private void T20_Tick(object sender, EventArgs e)
        {
            if (RM692EX_GIR_State == 2)
            {
                RM692EX_AUTO_LUM(null, null);
            }
            else if (RM692EX_GIR_State == 3)
            {
                RM692EX_AUTO_GIR(null, null);
            }
            else if (RM692EX_GIR_State == 1)
            {
                RM692EX_btnlogic_go_Click(null, null);//显示小白
                RM692EX_AUTO_gamma(null, null);
            }
            else
            {
                RM692EX_AUTO_gamma(null, null);
            }
        }
        private void Btn_load_gamma_patten_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fldb = new FolderBrowserDialog();
            fldb.ShowNewFolderButton = false;
            DialogResult res = fldb.ShowDialog();
            if (res != System.Windows.Forms.DialogResult.OK)
            {
                MessageBox.Show("没选择任何文件夹.");
                return;
            }
            Gamma_loading_path.Text = fldb.SelectedPath;

            if (!Directory.Exists(Gamma_loading_path.Text))
            {
                MessageBox.Show("文件夹不存在.");
                return;
            }
        }
        public bool start_15gamma = true;//667项目15绑点模式  默认开启15绑点模式
        private void button_382gamma_Click(object sender, EventArgs e)
        {
            if (start_15gamma == false)
            {
                RM692EX_R15.Enabled = RM692EX_R16.Enabled = RM692EX_R17.Enabled = RM692EX_R18.Enabled = RM692EX_R19.Enabled =
                RM692EX_R20.Enabled = RM692EX_R21.Enabled = RM692EX_R22.Enabled = RM692EX_R23.Enabled = RM692EX_R24.Enabled =
                RM692EX_R25.Enabled = RM692EX_R26.Enabled = false;
                RM692EX_G15.Enabled = RM692EX_G16.Enabled = RM692EX_G17.Enabled = RM692EX_G18.Enabled = RM692EX_G19.Enabled =
                RM692EX_G20.Enabled = RM692EX_G21.Enabled = RM692EX_G22.Enabled = RM692EX_G23.Enabled = RM692EX_G24.Enabled =
                RM692EX_G25.Enabled = RM692EX_G26.Enabled = false;
                RM692EX_B15.Enabled = RM692EX_B16.Enabled = RM692EX_B17.Enabled = RM692EX_B18.Enabled = RM692EX_B19.Enabled =
                RM692EX_B20.Enabled = RM692EX_B21.Enabled = RM692EX_B22.Enabled = RM692EX_B23.Enabled = RM692EX_B24.Enabled =
                RM692EX_B25.Enabled = RM692EX_B26.Enabled = false;

            }
            else
            {
                RM692EX_R15.Enabled = RM692EX_R16.Enabled = RM692EX_R17.Enabled = RM692EX_R18.Enabled = RM692EX_R19.Enabled =
                RM692EX_R20.Enabled = RM692EX_R21.Enabled = RM692EX_R22.Enabled = RM692EX_R23.Enabled = RM692EX_R24.Enabled =
                RM692EX_R25.Enabled = RM692EX_R26.Enabled = true;
                RM692EX_G15.Enabled = RM692EX_G16.Enabled = RM692EX_G17.Enabled = RM692EX_G18.Enabled = RM692EX_G19.Enabled =
                RM692EX_G20.Enabled = RM692EX_G21.Enabled = RM692EX_G22.Enabled = RM692EX_G23.Enabled = RM692EX_G24.Enabled =
                RM692EX_G25.Enabled = RM692EX_G26.Enabled = true;
                RM692EX_R15.Enabled = RM692EX_R16.Enabled = RM692EX_B17.Enabled = RM692EX_B18.Enabled = RM692EX_B19.Enabled =
                RM692EX_B20.Enabled = RM692EX_B21.Enabled = RM692EX_B22.Enabled = RM692EX_B23.Enabled = RM692EX_B24.Enabled =
                RM692EX_B25.Enabled = RM692EX_B26.Enabled = true;
            }
        }
        private void Page_switch(object sender, EventArgs e)
        {
            if (radioButton_Page50.Checked == true)
            { radioButton_Page52.Checked = false; }

            if (radioButton_Page52.Checked == true)
            { radioButton_Page50.Checked = false; }
        }
        private void RM692EX_AUTO_gamma_stop(object sender, EventArgs e)
        {
            T20.Enabled = false;
        }
        private void RM692EX_Inter_Gamma_Click(object sender, EventArgs e)
        {


            RM692EX_Reg_Data.Text = "FE,70";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "28,00"; //Disable Gamma int
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            //----------------------------------------------
            RM692EX_Reg_Data.Text = "FE,40";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(5);
            RM692EX_Reg_Data.Text = "DA,C8";    /////Enable Measure mode  //15 point
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "D7," + int.Parse(Gamma_Band_Select.Text).ToString("x2");
            RM692EX_Others_Click(RM692EX_RegW, null);
            //----------------------------------------------
            RM692EX_Reg_Data.Text = "FE,78";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "F4,C0";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            if (rBt_RM692EX_Normal.Checked == true)
            {
                RM692EX_Reg_Data.Text = "F5," + int.Parse(Gamma_Band_Select.Text).ToString("x2");
                RM692EX_Others_Click(RM692EX_RegW, null);
            }
            else if (rBt_RM692EX_UDC.Checked == true)
            {
                RM692EX_Reg_Data.Text = "F6," + int.Parse(Gamma_Band_Select.Text).ToString("x2");
                RM692EX_Others_Click(RM692EX_RegW, null);
            }//主屏在F5,副屏在F6
            Thread.Sleep(15);
        }
        private void RM692EX_Exit_Gamma_Click(object sender, EventArgs e)
        {
            RM692EX_Reg_Data.Text = "fe,40";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "DA,88";  ///Disalbe Measure mode //15  point
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "FE,78";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(5);
            RM692EX_Reg_Data.Text = "F4,80";    //////Disable Gamma measure
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "FE,72";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "AD,08";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "FE,70";
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
            RM692EX_Reg_Data.Text = "28,21";    /////enable Gamma int
            RM692EX_Others_Click(RM692EX_RegW, null);
            Thread.Sleep(15);
        }
        private void Btn_RM692EX_GIR_Load_Click(object sender, EventArgs e)
        {
            string temp0 = frmHelp.Generate_textBox.Text;
            frmHelp.Generate_textBox.Text = txtCmd_GIR.Text;
            frmHelp.Generate_File_Click(frmHelp.Generate_File_Run, null);
            frmHelp.Generate_textBox.Text = temp0;
        }
        private void RM692EX_btnlogic_go_Click(object sender, EventArgs e)
        {
            /// <param name="LOGIC_TYPE"></图类型>
            /// <param name="M_R"></底色-红通道>
            /// <param name="M_G"></底色-绿通道>
            /// <param name="M_B"></底色-蓝通道>
            /// <param name="L_R"></局部-色红通道>
            /// <param name="L_G"></局部-色红通道>
            /// <param name="L_B"></局部-色红通道>
            /// <param name="X0"></局部-水平方向起点坐标>
            /// <param name="X1"></局部-水平方向终点坐标>
            /// <param name="Y0"></局部-竖直方向终点坐标>
            /// <param name="Y1"></局部-竖直方向终点坐标>
            /// <param name="R0"></局部-半径>
            frmHelp.OLED_LOGIC_G0(0, 0, 0, 0, 255, 255, 255, (ushort)(X0.Value), (ushort)(X1.Value), (ushort)(Y0.Value), (ushort)(Y1.Value), 0);
        }

        private int RM692EX_GIR_State = 0;
        private void RM692EX_GIR_TUNING_Click(object sender, EventArgs e)
        {
            double L_X, L_Y, L_Z;
            index = 0;
            flag1 = 1;
            flag2 = 1;
            flag3 = 1;
            //    Btn_RM692EX_GIR_Tuning_Set_Click(null, null);//载入GIR调节设定
            if (RM692EX_GIR_State == 0)
            {
                //         Btn_RM692EX_GIR_Load_Click(null, null);//载入GIR CODE
                //         Thread.Sleep(150);
            }
            RM692EX_GIR_State = 1;
            //------------flexible gamma use------------------
            frmHelp.Gamma_auto_adjust_count = 0;
            Gamma_adjust_timeout_flag = false;
            //------------------------------------------------
            gamma_r = GAMMAs.RM692EX_Gamma_r;
            gamma_g = GAMMAs.RM692EX_Gamma_g;
            gamma_b = GAMMAs.RM692EX_Gamma_b;
            btn_RM692Ex_Calculate_Click(null, null);
            RM692EX_btnlogic_go_Click(null, null);//显示小白
            Thread.Sleep(50);

            T20.Enabled = true;
        }
        private void RM692EX_GIR_CHECK(object sender, EventArgs e)
        {
            double lum_fullscreen, lum_local, soul_lum;
            RM692EX_btnlogic_go_Click(null, null);//显示小白
            Thread.Sleep(150);
            frmHelp.Msr_CASDK();
            lum_local = frmHelp.CASDK_LUM;
            frmHelp.OLED_Show_Click(frmHelp.btnwhite, null); //显示大白
            Thread.Sleep(150);
            frmHelp.Msr_CASDK(); lum_fullscreen = frmHelp.CASDK_LUM;
            soul_lum = Math.Abs(lum_local - lum_fullscreen);
            if ((double)(RM692EX_GIR_Spec.Value) < soul_lum) //CHECK 大小白亮度差
            {
                RM692EX_GIR_State = 1;
                RM692EX_GIR_TUNING_Click(null, null);//重新开始
            }
            else
            {
                RM692EX_GIR_State = 0;
                MessageBox.Show("GIR调整完成！");
            }
        }
        private void RM692EX_GIR_FullScreen_TUNING(object sender, EventArgs e)
        {
            double L_X, L_Y, L_Z;
            index = 0;
            flag1 = 1;
            flag2 = 1;
            flag3 = 1;
            //------------flexible gamma use------------------
            frmHelp.Gamma_auto_adjust_count = 0;
            Gamma_adjust_timeout_flag = false;
            //------------------------------------------------
            gamma_r = GAMMAs.RM692EX_Gamma_r;
            gamma_g = GAMMAs.RM692EX_Gamma_g;
            gamma_b = GAMMAs.RM692EX_Gamma_b;
            btn_RM692Ex_Calculate_Click(null, null);
            frmHelp.OLED_Show_Click(frmHelp.btnwhite, e); //显示大白
            Thread.Sleep(50);
            T20.Enabled = true;
        }
        private void RM692EX_GIR_RESET_Click(object sender, EventArgs e)
        {
            RM692EX_GIR_26H.Value = 1;
            RM692EX_GIR_27H.Value = 220;
            RM692EX_GIR_R.Value = 180;
            RM692EX_GIR_G.Value = 180;
            RM692EX_GIR_B.Value = 180;
            RM692EX_GIR_State = 0;
        }
        private void Btn_RM692EX_GIR_OTP_Click(object sender, EventArgs e)
        {
            string temp0 = frmHelp.Generate_textBox.Text;
            frmHelp.Generate_textBox.Text = txtCmd_OTP.Text;
            frmHelp.Generate_File_Click(frmHelp.Generate_File_Run, null);
            frmHelp.Generate_textBox.Text = temp0;
        }
        private void Btn_RM692EX_GIR_Tuning_Set_Click(object sender, EventArgs e)
        {
            RM692EX_Gamma_SetBox.Text = null;
            RM692EX_Gamma_SetBox.Text = RM692EX_GIR_SetBox.Text;
        }


        private void RM692EX_Gamma_SetBox_TextChanged(object sender, EventArgs e)
        {

        }

        private void RM692EX_Load(object sender, EventArgs e)
        {

        }
        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (RM692EX_Gamma_SetBox.Text == string.Empty)
            {
                MessageBox.Show("内容为空!");
            }
            else
            {
                //创建保存对话框对象
                SaveFileDialog save = new SaveFileDialog();
                save.Filter = "gamma cfg files (*.txt)|*.txt"; //过滤文件类型
                save.FilterIndex = 1;
                save.RestoreDirectory = true;
                if (save.ShowDialog() == DialogResult.OK)
                {
                    string path = save.FileName;
                    save.DefaultExt = ".txt";
                    StreamWriter sw = new StreamWriter(path);
                    sw.WriteLine(RM692EX_Gamma_SetBox.Text);
                    sw.Close();
                }
            }
        }

        private void radioButton_60hz_CheckedChanged(object sender, EventArgs e)
        {
            if (radioButton_60hz.Checked == true)
            {
                textBox8.Text =
                "IC WRITE\r\n" +
                "[FE]-00 \r\n" +
                "[28]	 \r\n" +
                "[FE]-D4 \r\n" +
                "[87]-01 \r\n" +
                "[5F]-05 \r\n" +
                "[FE]-FD \r\n" +
                "[86]-01 \r\n" +
                "[FE]-D2 \r\n" +
                "[0A]-94 \r\n" +
                "[FE]-D0 \r\n" +
                "[9C]-61 \r\n" +
                "[78]-01 \r\n" +
                "[FE]-40 \r\n" +
                "[DC]-40 \r\n" +
                "[10]-82 \r\n" +
                "[0E]-80 \r\n" +
                "[FE]-14 \r\n" +
                "[8E]-00 \r\n" +
                "IC WRITE\r\n" +
                "[FE]-14 \r\n" +
                "[88]-00 \r\n" +
                "[89]-00 \r\n" +
                "[8A]-00 \r\n" +
                "[8b]-1E \r\n" +
                "[8c]-F0 \r\n" +
                "[8d]-0A \r\n" +
                "[FE]-D1 \r\n" +
                "[C6]-08 \r\n" +
                "[C6]-00 \r\n" +
                "[CE]-17";

                textBox10.Text =
                "IC WRITE\r\n" +
                "[FE]-FF \r\n" +
                "[F0]-10 \r\n" +
                "[FE]-14 \r\n" +
                "[88]-00 \r\n" +
                "[89]-00 \r\n" +
                "[8A]-00 \r\n" +
                "[8B]-1E \r\n" +
                "[8C]-F0 \r\n" +
                "[8D]-0A \r\n" +
                "[FE]-71 \r\n" +
                "[EE]-01";
            }
            else if (radioButton_144Hz.Checked == true)
            {
                textBox8.Text =
                "IC WRITE\r\n" +
                "[FE]-00 \r\n" +
                "[28]	 \r\n" +
                "[FE]-D4 \r\n" +
                "[87]-01 \r\n" +
                "[5F]-05 \r\n" +
                "[FE]-FD \r\n" +
                "[86]-01 \r\n" +
                "[FE]-D2 \r\n" +
                "[0A]-94 \r\n" +
                "[FE]-D0 \r\n" +
                "[9C]-61 \r\n" +
                "[78]-01 \r\n" +
                "[FE]-40 \r\n" +
                "[DC]-40 \r\n" +
                "[10]-82 \r\n" +
                "[0E]-80 \r\n" +
                "[FE]-14 \r\n" +
                "[8E]-00 \r\n" +
                "IC WRITE\r\n" +
                "[FE]-14 \r\n" +
                "[88]-00 \r\n" +
                "[89]-00 \r\n" +
                "[8A]-00 \r\n" +
                "[8b]-1F \r\n" +
                "[8c]-50 \r\n" +
                "[8d]-0E \r\n" +
                "[FE]-D1 \r\n" +
                "[C6]-08 \r\n" +
                "[C6]-00 \r\n" +
                "[CE]-17";

                textBox10.Text =
                "IC WRITE\r\n" +
                "[FE]-FF \r\n" +
                "[F0]-10 \r\n" +
                "[FE]-14 \r\n" +
                "[88]-00 \r\n" +
                "[89]-00 \r\n" +
                "[8A]-00 \r\n" +
                "[8B]-1F \r\n" +
                "[8C]-50 \r\n" +
                "[8D]-0E \r\n" +
                "[FE]-71 \r\n" +
                "[EE]-01";

            }
        }
        private string csv_defaultfilePath = "";
        private void button_csv_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog dialog = new FolderBrowserDialog();
            //首次defaultfilePath为空，按FolderBrowserDialog默认设置（即桌面）选择

            if (csv_defaultfilePath != "")
            {
                //设置此次默认目录为上一次选中目录
                dialog.SelectedPath = csv_defaultfilePath;
            }
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                //记录选中的目录
                csv_defaultfilePath = dialog.SelectedPath;
                textBox_csv.Text = csv_defaultfilePath;
            }
            if (!Directory.Exists(textBox_csv.Text))
            {
                MessageBox.Show("文件夹不存在.");
                return;
            }
            string s = null;
            DirectoryInfo d = new DirectoryInfo(textBox_csv.Text);
            FileInfo[] Files = d.GetFiles("*.*");//*.hex|
                                                 // List<string> lstr = new List<string>();

            foreach (FileInfo file in Files)
            {
                s = file.Name.ToLower();
                if (s.EndsWith(".csv"))
                {
                    listBox_csv.Items.Add(s);
                }
            }

        }

        private void button_Convert_Click(object sender, EventArgs e)
        {
            //string FileName = textBox_csv.Text + '\\' + listBox_csv.SelectedItem.ToString();
            string FileName = listBox_csv.SelectedItem.ToString();

            int V, H;
            if (radioButton_CSV_RB.Checked == true)
            {
                V = 2400;
                H = 540;
            }
            else                                    //G
            {
                V = 2400;
                H = 1080;
            }

            double[,] tmp_array = new double[V, H];

            StreamReader streamReader1 = new StreamReader(FileName);

            streamReader1.BaseStream.Seek(0, SeekOrigin.Begin);
            string strLine1 = streamReader1.ReadLine();
            int j = 0;
            while (!string.IsNullOrEmpty(strLine1))
            {
                string strtmp = "";
                strtmp = strtmp + strLine1 + ",";
                strLine1 = streamReader1.ReadLine(); //循环读取下一行

                string[] arrtmp1 = strtmp.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

                for (int i = 0; i < arrtmp1.Length; i += 1)
                {
                    tmp_array[j, i] = Convert.ToDouble(arrtmp1[i]);
                }
                arrtmp1 = null;
                j++;
            }
            streamReader1.Close();

            //for(int loop_i = 0; loop_i< arrtmp1.Length; loop_i += 1)
            int Start_X = Convert.ToInt32(textBox_Start_L_X.Text);
            int Start_Y = Convert.ToInt32(textBox_Start_L_Y.Text);
            int End_X = Convert.ToInt32(textBox_End_L_X.Text);
            int End_Y = Convert.ToInt32(textBox_End_L_Y.Text);
            double Gain = Convert.ToDouble(textBox_csv_L_gain.Text);
            for (int row = Start_Y; row < End_Y; row++)
            {
                for (int col = Start_X; col < End_X; col++)
                {
                    tmp_array[row, col] = tmp_array[row, col] * Gain;
                }
            }

            Start_X = Convert.ToInt32(textBox_Start_R_X.Text);
            Start_Y = Convert.ToInt32(textBox_Start_R_Y.Text);
            End_X = Convert.ToInt32(textBox_End_R_X.Text);
            End_Y = Convert.ToInt32(textBox_End_R_Y.Text);
            Gain = Convert.ToDouble(textBox_csv_R_gain.Text);
            for (int row = Start_Y; row < End_Y; row++)
            {
                for (int col = Start_X; col < End_X; col++)
                {
                    tmp_array[row, col] = tmp_array[row, col] * Gain;
                }
            }
            Write_Array_To_Csv(V, H, ".\\" + FileName, tmp_array);

        }


        public static void Write_Array_To_Csv(int V, int H, string File_Address, Double[,] array)
        {
            StreamWriter sw = null; //文件流
            double arry_value;
            sw = new StreamWriter(File_Address, false, Encoding.UTF8);
            for (int i = 0; i < V; i++)
            {
                for (int j = 0; j < H; j++)
                {
                    //"0.00000000000"需要10位小数，需要保留11位，然后删除最后一位，避免精度导致最后一位小数有差异
                    array[i, j] = Math.Round(array[i, j], 11);
                    arry_value = Math.Round(array[i, j], 10);
                    if (arry_value >= 0)
                    {
                        if (arry_value <= array[i, j])
                        {
                            array[i, j] = arry_value;
                        }
                        else
                        {
                            array[i, j] = arry_value - 0.0000000001;
                        }
                    }
                    else
                    {
                        if (arry_value < array[i, j])
                        {
                            array[i, j] = arry_value + 0.0000000001;
                        }
                        else
                        {
                            array[i, j] = arry_value;
                        }
                    }

                    sw.Write(array[i, j]);
                    if (j < H - 1)
                    {
                        sw.Write(",");
                    }
                }
                sw.Write("\n");
                //删除末尾逗号空格
            }
            sw.Dispose(); //释放资源
            sw.Close(); //关闭数据流

        }

        private void 载入ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog of = new OpenFileDialog();
            of.Filter = "精度配置文件(*.txt)|*.txt|所有文件(*.*)|*.*";
            of.Title = "gamma cfg write";

            if (of.ShowDialog() == DialogResult.OK)
            {
                RM692EX_Gamma_SetBox.Clear();
                //读取文本信息
                FileStream fs = new FileStream(of.FileName, FileMode.Open, FileAccess.Read);
                StreamReader streamReader = new StreamReader(fs, Encoding.GetEncoding("GBK"));
                streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
                string str_generate = streamReader.ReadLine();
                //循环读取文本信息
                while (str_generate != null)
                {
                    RM692EX_Gamma_SetBox.AppendText(str_generate + "\r\n");
                    str_generate = streamReader.ReadLine(); //循环读取下一行
                }
                fs.Close(); //关闭流
                streamReader.Close();
            }
        }
        //Demura
        private void Btn_RM692EX_Demura_Click(object sender, EventArgs e)
        {
            string temp0 = frmHelp.Generate_textBox.Text;
            Button btnTmp = (Button)sender;
            switch (btnTmp.Name)
            {
                case "btn_en":
                    {
                        frmHelp.Generate_textBox.Text = textBox1.Text;
                    }
                    break;
                case "btn_erase":
                    {
                        frmHelp.Generate_textBox.Text = textBox2.Text;
                    }
                    break;
                case "btn_2c3c_inter":
                    {
                        frmHelp.Generate_textBox.Text = textBox3.Text;
                    }
                    break;
                case "btn_2c3c_end":
                    {
                        frmHelp.Generate_textBox.Text = textBox4.Text;
                    }
                    break;
                case "btn_checksum":
                    {
                        frmHelp.Generate_textBox.Text = textBox5.Text;
                    }
                    break;


                case "DOE_BTN_EN":
                    {
                        frmHelp.Generate_textBox.Text = textBox6.Text;
                    }
                    break;
                case "DOE_BTN_ERASE":
                    {
                        frmHelp.Generate_textBox.Text = textBox7.Text;
                    }
                    break;
                case "DOE_BTN_ENTER":
                    {
                        frmHelp.Generate_textBox.Text = textBox8.Text;
                    }
                    break;
                case "DOE_BTN_WRITE":
                    {
                        frmHelp.Generate_textBox.Text = textBox9.Text;
                    }
                    break;
                case "DOE_BTN_CRC":
                    {
                        frmHelp.Generate_textBox.Text = textBox10.Text;
                    }
                    break;
            }
            frmHelp.Generate_File_Click(frmHelp.Generate_File_Run, null);
            frmHelp.Generate_textBox.Text = temp0;
        }
    }
}

